我在这里做错了什么或我不做什么? (我在.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库中的错误吗?
答案 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选项对我有用。