2013-06-16 15 views
13

Quando si utilizza Enterprise Library 6.0, questo errore si verifica nel seguente codice: "Deve impostare un'ExceptionManager nella classe ExceptionPolicy utilizzando il metodo SetExceptionManager"Come utilizzare Exception Manager Enterprise Library 6.0

bool rethrow = ExceptionPolicy.HandleException(ex, "ReplacePolicy1") 

In Enterprise Library 5.0 di questo codice ha funzionato:

public static bool HandleException(Exception exception, string PolicyName) 
{ 
    ExceptionManager exManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>(); 
    ExceptionPolicy.SetExceptionManager(exManager); 
    bool rethrow = ExceptionPolicy.HandleException(ex, "ReplacePolicy1"); 
    return reThrow; 
} 

Ma in Enterprise Library 6.0 classe EnterpriseLibraryContainer non viene trovato. Voglio ottenere l'istanza di ExceptionManager. Come posso risolvere questo problema?

+3

"La maggior parte, se non tutte, delle classi Enterprise Library non sono più mantenuti" - io non sono un fan di EntLib, ma non penso che questa affermazione sia accurata - vedi http://msdn.microsoft.com/en-us/library/ff648951.aspx – Joe

+1

Il team della biblioteca aziendale ha deprecato il blocco Caching, Cryptography e Security nella nuova Enterprise Library 6. Hanno fatto questo perché ritenevano che .NET Framework supportasse molte delle stesse funzionalità ora disponibili. Hanno aggiunto alcuni nuovi blocchi, incluso il Semantic Logging (che è molto utile). Enterprise Library è mantenuto come open source su entlib.codeplex.com e sicuramente non è ritirato. –

risposta

16

EnterpriseLibraryContainer è stato rimosso per il rilascio di Enterprise Library 6. V'è un nuovo approccio per l'avvio dei blocchi applicativi di Enterprise Library 6. Se si desidera ottenere un'istanza di ExceptionManager è possibile utilizzare la fabbrica:

IConfigurationSource config = ConfigurationSourceFactory.Create(); 
ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config); 

ExceptionManager exManager = factory.CreateManager(); 

per configurare i blocchi di utilizzare le facciate statiche è possibile utilizzare il metodo SetExceptionManager e fornire l'ExceptionManager dall'alto:

ExceptionPolicy.SetExceptionManager(factory.CreateManager()); 

Questo ha solo bisogno di essere fatto una volta all'avvio dell'applicazione su.

+0

Ho copiato questo codice ma ricevo un'eccezione sulla 3a riga quando viene eseguito factory.CreateManager(). Il messaggio di eccezione è: "È necessario impostare un ExceptionManager nella classe ExceptionPolicy utilizzando il metodo SetExceptionManager." Qualche idea su come risolvere questo? – Philippe

+1

Questo messaggio viene emesso solo quando si chiama 'ExceptionPolicy.HandleException'. Se si sta utilizzando la facciata statica, è necessario chiamare 'ExceptionPolicy.SetExceptionManager (factory.CreateManager());' una volta all'avvio dell'applicazione (o prima che venga eseguito il codice di gestione delle eccezioni). Se hai ancora problemi, è meglio pubblicare una nuova domanda con le specifiche del tuo problema (codice, configurazione, ecc.). –

+0

Grazie per la risposta. Ho appena scoperto sperimentando che questo è solo un problema nelle librerie di servizi WCF. Quando sposto il codice nel progetto di hosting HTTP, il problema scompare. L'unico inconveniente è che non eseguo la protezione delle eccezioni WCF quando eseguo il debug utilizzando direttamente WcfSvhHost.exe nella libreria. Nessun grosso problema. – Philippe

1

Ho anche affrontato questo problema e ora ho risolto questo. Quindi, si può anche provare a impostare il seguente codice nella Application_Start() nel file Global.asax:

IConfigurationSource configurationSource = ConfigurationSourceFactory.Create(); 
DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory()); 
if (configurationSource.GetSection(LoggingSettings.SectionName) != null) 
Logger.SetLogWriter(new LogWriterFactory(configurationSource).Create()); 
ExceptionPolicy.SetExceptionManager(new ExceptionPolicyFactory(configurationSource).CreateManager()); 
Problemi correlati