我们有一个WCF服务,可以进行大量的事务NHibernate调用.偶尔我们看到SQL超时,即使调用更新了不同的行,并且表被设置为行级锁定.
在深入研究日志之后,看起来不同的线程正在进入代码中的相同点(我们的事务使用块),并且更新挂起在提交上.但是,它没有意义,因为我们认为以下服务类属性强制每个服务调用一个唯一的执行线程:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
Run Code Online (Sandbox Code Playgroud)
我们最近将并发模式改为ConcurrencyMode.Single并且还没有遇到任何问题,但是这个错误非常难以重现(如果有人有任何关于刷出这样的错误的想法,请告诉我!).
无论如何,这一切都让我想到了问题:PerCall的InstanceContextMode是否应该在服务中强制执行线程安全,即使ConcurrencyMode设置为多个?如何通过同一个服务实例为两个调用提供服务?
谢谢!