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