2010-11-09 7 views
5

Qu'est-ce que je fais mal ici ou que ne fais-je pas? (J'utilise ce code dans un service .NET 4.0 WCF)Quel est le problème avec "Microsoft.Practices.EnterpriseLibrary.Caching" en essayant d'accéder à "CacheFactory.GetCacheManager();"?

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

Lorsque hits débogueur retour il génère cette exception:

System.Threading.SynchronizationLockException message = a eu lieu la méthode de synchronisation de l'objet a été appelé à partir un bloc de code non synchronisé. Source = Microsoft.Practices.Unity StackTrace: à Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit() dans e: \ Builds \ Unity \ UnityTemp \ Compil \ Unity \ Unity \ Src \ Lifetime \ SynchronizedLifetimeManager.cs: ligne 109 InnerException:

Est-ce un bug dans la bibliothèque Enterprice?

Répondre

0

Je reçois la même erreur lorsque j'essaie de créer une base de données dans un service WCF. (Entlib 5.0, .net 4,0)

Database db = DatabaseFactory.CreateDatabase(); 

Nous sommes promenés en utilisant plutôt un objet SqlDatabase. La base de données a peut-être été dépréciée, c'est donc ce que je vérifierais d'abord dans votre code et je m'assurerais que ce que vous essayez de faire est toujours supporté.

8

Le problème existe en effet dans de nombreux blocs de bibliothèque d'entreprise. Cela a quelque chose à voir avec la façon dont Unity est implémenté. Le vrai problème n'est pas que le code lui-même est incorrect. L'exception est interceptée, mais le débogueur semble ignorer ce fait.

Le problème est décrit ici:

Malheureusement, il n'y a pas grand-chose que vous pouvez faire pour éviter ce bug. Ce serait vraiment bien si l'équipe de Patterns devrait être plus itérative pour résoudre ce problème;).

Bonne codification!

7

Il semble que l'exception soit générée en interne par le bloc Unité de bibliothèque d'entreprise, mais elle est également gérée. Cela m'a fait tirer mon oreille jusqu'à ce que je réalise que j'avais Break quand une exception Thrown est activée pour l'exception CLR.

Debug -> Exception

décochant cette arrête le débogueur de se casser lorsque l'exception est levée.

0

J'ai rencontré cela lors de l'ajout d'une fonctionnalité à un ancien programme qui utilise EntLib. Désactiver l'exception du débogueur était comme un hack. Dans VS 2015, les outils | Options | Débogage | Activer les options Just My Code a fonctionné pour moi.