Enterprise Library e Distributor per logging eccezioni

Siccome ci ho perso un po' di tempo a trovare il problema e la relativa soluzione la posto anche come reminder per il futuro.

Se utilizzate l'Exception Handling Application Block dell'Enterprise Library insieme al distributor in modo da inviare eccezioni da più server verso un'unica coda MSMQ da cui recuperarle e scriverle per esempio in un DB centralizzato, dovete prestare attenzione al meccanismo di serializzazione utilizzato.

Per poter funzionare correttamente il distributor si deve utilizzare il BinaryFormatter, di conseguenza se create un'eccezione Custom es. XYZ.InvalidMerchantException questa viene serializzata correttamente dal programma d'origine, ma quando arriva sul server di destinazione la deserializzazione non funziona se non è presente l'assembly originale nella cartella del distributor.

Per evitare di dover distribuire tutti gli assembly di tutte le applicazioni custom insieme al distributor, dovete configurare un Wrap Handler prima del Logging Handler in modo da incapsulare l'eccezione originaria in una comunissima System.Exception ed evitare il problema descritto.

Una soluzione più elegante potrebbe essere quella di distribuire un'eccezione Custom con tutte le applicazioni incluso il distributor in modo da utilizzarla come wrapper al posto della System.Exception.

posted @ lunedì 10 novembre 2008 22:42

Print
Comments have been closed on this topic.