2010-11-09 4 views
5

Was mache ich hier falsch oder was mache ich nicht? (Ich verwende diesen Code in einer .NET 4.0 WCF-Dienst)Was ist falsch mit der "Microsoft.Practices.EnterpriseLibrary.Caching" beim Versuch, auf "CacheFactory.GetCacheManager();" zuzugreifen?

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

Wenn Debugger Treffer zurückgeben diese Ausnahme Würfe:

System.Threading.SynchronizationLockException aufgetreten Message = Object Synchronisation Methode aufgerufen wurde von ein unsynchronisierter Codeblock. Quelle = Microsoft.Practices.Unity StackTrace: bei Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit() in e: \ Builds \ Unity \ UnityTemp \ Kompilieren \ Unity \ Unity \ Src \ Lifetime \ SynchronizedLifetimeManager.cs: Zeile 109 InnerException:

Ist das ein Fehler in der Enterprise Library?

Antwort

0

Ich bekomme den gleichen Fehler beim Versuch, eine Datenbank in einem WCF-Dienst zu erstellen. (EntLib 5.0, .net 4,0)

Database db = DatabaseFactory.CreateDatabase(); 

Wir haben um durch sie stattdessen ein SQLDatabase Objekt. Die Datenbank ist möglicherweise veraltet, daher werde ich zuerst in Ihrem Code nachsehen und sicherstellen, dass das, was Sie versuchen, weiterhin unterstützt wird.

8

Das Problem existiert tatsächlich in vielen Enterprise Library-Blöcken. Es hat etwas damit zu tun, wie Unity implementiert wird. Das eigentliche Problem ist nicht, dass der Code selbst falsch ist. Die Ausnahme wird abgefangen, aber der Debugger scheint diese Tatsache zu ignorieren.

Das Problem ist hier beschrieben:

Leider gibt es nicht viel Sie diesen Fehler zu vermeiden, tun können. Es wäre auf jeden Fall schön, wenn das Patterns & Practices-Team bei der Lösung dieses Problems mehr iterativ wäre;).

Glückliche Codierung!

7

Es scheint, dass die Ausnahme intern vom Unity-Block der Enterprise-Bibliothek ausgelöst wird, es wird jedoch ebenfalls behandelt. Das brachte mich dazu, mein Gehör herauszuziehen, bis mir klar wurde, dass ich Break hatte, wenn eine Exception für CLR Exception aktiviert wurde.

Debug -> Ausnahme

Abwählen gestoppt dies den Debugger bricht, wenn die Ausnahme ausgelöst wird.

0

Ich fand dies beim Hinzufügen einer Funktion zu einem alten Programm, das EntLib verwendet. Das Deaktivieren der Debugger-Ausnahme fühlte sich wie ein Hack an. In VS 2015 sind die Tools | Optionen | Debuggen | Aktivieren Sie Just My Code Optionen für mich.

Verwandte Themen