尝试访问"CacheFactory.GetCacheManager();"时,"Microsoft.Practices.EnterpriseLibrary.Caching"有什么问题?

Chr*_*fer 5 .net wcf caching

我在这里做错了什么或我不做什么?(我在.NET 4.0 WCF服务中使用此代码)

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

当调试器命中返回时,它会抛出此异常:

System.Threading.SynchronizationLockException发生Message =对象同步方法是从未同步的代码块调用的.Source = Microsoft.Practices.Unity StackTrace:位于e:\ Builds\Unity\UnityTemp\Compile\Unity\Unity\Src\Lifetime\SynchronizedLifetimeManager.cs中的Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit():第109行InnerException:

这是Enterprice库中的错误吗?

Dot*_*ert 8

确实存在许多Enterprise Library块中存在的问题.它与Unity的实现方式有关.实际问题不是代码本身不正确.捕获异常,但调试器似乎忽略了这一事实.

问题在这里描述:

不幸的是,你没有太多办法可以避免这个bug.如果模式与实践团队在解决这个问题时应该更加迭代,那肯定会很好;).

快乐的编码!


Gra*_*ing 7

似乎企业库Unity块在内部抛出了异常,但它也会被处理.这让我听到了我的声音,直到我意识到我在为CLR异常启用了异常时发生了中断.

调试 - >异常

解决这个问题会阻止调试器在抛出异常时中断.


小智 0

尝试在 WCF 服务中创建数据库时出现同样的错误。(Entlib 5.0、.net 4.0)

Database db = DatabaseFactory.CreateDatabase();
Run Code Online (Sandbox Code Playgroud)

我们通过使用 SqlDatabase 对象来解决这个问题。数据库可能已被弃用,因此我将首先在您的代码中检查并确保您尝试执行的操作仍然受到支持。