2010-11-09 23 views
5

¿Qué estoy haciendo mal aquí o qué no estoy haciendo? (estoy utilizando este código en un servicio WCF .NET 4,0)¿Qué ocurre con "Microsoft.Practices.EnterpriseLibrary.Caching" cuando intenta acceder a "CacheFactory.GetCacheManager();"?

 private static ICacheManager GetCacheManager() 
    { 
     try 
     {     
      return CacheFactory.GetCacheManager(); 
     } 
     catch (SynchronizationLockException ex) 
     { 
      EventLogHelper.WriteError(ex); 
     } 
     catch (ConfigurationException ex) 
     { 
      EventLogHelper.WriteError(ex); 
     } 
     return null; 
    } 

Cuando éxitos depurador retorno que emite esta excepción:

System.Threading.SynchronizationLockException ocurrido método de sincronización = Objeto mensaje fue llamado desde un bloque de código no sincronizado. Fuente = Microsoft.Practices.Unity StackTrace: en Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit() en e: \ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity \ Src \ Lifetime \ SynchronizedLifetimeManager.cs: línea 109 InnerException:

¿Esto es un error en la biblioteca de Enterprice?

Respuesta

0

Recibo el mismo error al intentar crear una base de datos en un servicio WCF. (EntLib 5.0, .Net 4,0)

Database db = DatabaseFactory.CreateDatabase(); 

Llegamos alrededor de ella mediante el uso de un objeto SqlDatabase lugar. Es posible que la base de datos haya quedado en desuso, por lo que es lo primero que verificaría en su código y se asegurará de que lo que intenta hacer siga siendo compatible.

8

El problema existe en muchos bloques de Enterprise Library. Tiene algo que ver con la forma en que se implementa Unity. El problema real no es que el código en sí sea incorrecto. La excepción está atrapada, pero el depurador parece ignorar ese hecho.

El problema se describe aquí:

Por desgracia, no hay mucho que puede hacer para evitar este error. Definitivamente sería bueno si el equipo de Patterns & Practices fuera más iterativo para resolver este problema;).

Happy coding!

7

Parece que la excepción es lanzada internamente por el bloque Enterprise Library Unity, sin embargo, también se maneja. Esto me hizo sacar mi audición hasta que me di cuenta de que tenía un Receso cuando se activó una excepción para la Excepción de CLR.

Depuración -> Excepción

unticking este detuvo el depurador se rompa cuando se produce la excepción.

0

Me encontré con esto al agregar una característica a un programa anterior que utiliza EntLib. Desactivar la excepción del depurador parecía un truco. En VS 2015, las Herramientas | Opciones | Depuración | Habilitar las opciones de Just My Code funcionó para mí.

Cuestiones relacionadas