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

时间:2010-11-09 12:31:56

标签: .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;
    }

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

发生了System.Threading.SynchronizationLockException   Message =从非同步代码块调用对象同步方法。   来源= Microsoft.Practices.Unity   堆栈跟踪:        在e:\ Builds \ Unity \ UnityTemp \ Compile \ Unity \ Unity \ Src \ Lifetime \ SynchronizedLifetimeManager.cs中的Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit():第109行   InnerException:

这是Enterprice库中的错误吗?

4 个答案:

答案 0 :(得分:8)

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

问题在这里描述:

不幸的是,你没有太多办法可以避免这个bug。如果这些模式&实践团队应该更加迭代地解决这个问题;)。

快乐的编码!

答案 1 :(得分:7)

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

调试 - >例外

在抛出异常时,取消这会阻止调试器中断。

答案 2 :(得分:0)

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

Database db = DatabaseFactory.CreateDatabase();

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

答案 3 :(得分:0)

在向使用EntLib的旧程序添加功能时遇到此问题。关闭调试器异常感觉就像一个黑客。在VS 2015中,工具|选项|调试|启用Just My Code选项对我有用。