这是背景信息。我有一个WCF服务,配置如下
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
现在我需要一些帮助来确切地理解这个上下文模式是如何工作的。
这就是我正在处理的问题。为了便于讨论,假设我有一个调用,它需要10秒才能执行并从服务器返回。如果我同时进行两个调用(使用Ajax请求),第一个请求将在10秒后返回。但是第二个请求将在20秒后返回。
我期望这个上下文模式能够独立地处理两个请求,并同时返回两个请求。我是否正确配置了我的服务?
在PerCall
中,每个调用被分配一个单独的实例(用于极端可伸缩性)。对该方法的每次调用都会创建一个新的服务器对象(单独的线程)。一旦请求被处理(方法返回),新的实例就被释放。
如果您已经将该方法配置为使用ConcurrencyMode.Single
,那么您将看到此阻塞行为。
您应该考虑检查serviceThrottling
配置,以确保您的应用程序被适当地调优。
<serviceBehaviors>
<behavior name="throttleBehavior">
<serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/>
</behavior>
</serviceBehaviors>
以下配置
[ServiceBehavior(InstanceContextMode = InstanceContextMode. percall)]
可能并不总是为每个调用立即创建服务上下文。如果使用的绑定启用了会话,并且服务实现了IDispose,那么当已经有另一个客户机的服务实例时,客户机调用将排队。所以,在你的例子中,检查绑定细节