这是背景信息。我有一个像这样配置的WCF服务
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
现在我需要一些帮助来了解这种情境模式的确切运作方式。
这是我正在处理的问题。为了论证,假设我有一个需要10秒钟才能执行并从服务器返回的调用。如果我同时进行两次调用(使用Ajax请求),第一个请求将在10秒后返回。但第二个请求将在20秒后回来。
我原以为这种上下文模式会同时处理两个请求,并同时返回两个请求。我是否正确配置了我的服务?
答案 0 :(得分:1)
在PerCall
中,每个呼叫都分配了一个单独的实例(用于极端可扩展性)。每次调用该方法都会导致创建一个新的服务器对象(单独的线程)。处理完请求后(方法返回),将释放新实例。
如果您已将方法配置为使用ConcurrencyMode.Single
,那么您会看到此阻止行为。
您应该考虑查看serviceThrottling
配置,以确保您的应用程序正确调整。
<serviceBehaviors>
<behavior name="throttleBehavior">
<serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/>
</behavior>
</serviceBehaviors>
答案 1 :(得分:0)
以下配置
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
可能并不总是立即为每个调用创建服务上下文。如果使用的绑定是会话启用且服务实现IDispose,则客户端调用将排队,而已有另一个客户端的服务实例。因此,请检查案例中的绑定详细信息。