【发布时间】:2011-02-16 17:24:26
【问题描述】:
你好,我有一个像这样的简单 wcf 服务,它有一个简单地休眠 20 秒并返回一个值的测试方法。我编写了一个测试页面,它使用 jquery 连续调用它 10 次,它似乎是同时执行的,客户端等待 20 秒,然后大约同时从所有服务返回结果。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple,UseSynchronizationContext=false)]
public class AjaxTestWCFService : IAjaxTestWCFService
但是如果我设置
aspNetCompatibilityEnabled="true"
在 web.config 中,无论我做什么,使用 concurrencymode, usesynchronizationcontext 或实例上下文模式,甚至 serviceThrottling 配置,它似乎都按顺序执行每个 Web 服务调用,所有 10 个请求都需要 2 分钟回来!!
现在我意识到这可能是因为会话,但至少在 ASMX 服务中我能够将 enablesession 设置为 false。事实上,我的网络服务方法根本没有使用会话。所以你可能想知道,为什么要使用aspNetCompatibilityEnabled。因为我想使用 ASP.net 模拟和表单身份验证。
我什至设置
[ServiceContract(SessionMode=SessionMode.NotAllowed)]
所以我的问题是,这是设计使然吗?如何在启用 ASP.net 兼容性的情况下启用并发 Web 服务请求?
【问题讨论】: