【发布时间】:2011-05-18 13:53:43
【问题描述】:
我有一个 WCF 服务,它有一个复杂的 operationcontract 必须以原子方式执行,即整个操作成功或失败。 WCF 服务托管在 ASP .NET 应用程序中的 IIS 服务器上。此操作具有在事务中执行的一系列 SQL 命令。在测试期间,我发现在 4 - 5 个用户同时访问的情况下,至少有一个用户出现“事务死锁”错误。
然后我查看了我设置的 serviceThrottling 设置
<serviceThrottling maxConcurrentCalls ="5" maxConcurrentInstances ="50" maxConcurrentSessions ="5" />
改成
<serviceThrottling maxConcurrentCalls ="1" maxConcurrentInstances ="1" maxConcurrentSessions ="1" />
我已关闭会话,因为我不需要服务合同。所以我不知道 maxConcurrentSessions 是否会产生任何影响
<ServiceContract([Namespace]:="http://www.8343kf393.com", SessionMode:=SessionMode.NotAllowed)>
通过这种方式,我将请求排队,以便顺序处理请求而不是同时处理。虽然交易问题消失了,但处理时间增加了,这是意料之中的。
我想知道
serviceThrottling 是否是解决此问题的唯一方法?
如何设置 serviceThrottling 以使服务同时接受多个请求但一次处理一个?
-
是否在此处设置相关的 InstanceContextMode=InstancePerContext.PerCall,因为应用程序是 ASP .Net 应用程序,它本身就是多线程的?
李>
【问题讨论】:
标签: asp.net wcf concurrency service transactions