如何配置WCF服务以使用PerCall实例上下文运行?

时间:2011-12-21 16:43:17

标签: wcf instancecontextmode

这是背景信息。我有一个像这样配置的WCF服务

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

现在我需要一些帮助来了解这种情境模式的确切运作方式。

这是我正在处理的问题。为了论证,假设我有一个需要10秒钟才能执行并从服务器返回的调用。如果我同时进行两次调用(使用Ajax请求),第一个请求将在10秒后返回。但第二个请求将在20秒后回来。

我原以为这种上下文模式会同时处理两个请求,并同时返回两个请求。我是否正确配置了我的服务?

2 个答案:

答案 0 :(得分:1)

PerCall中,每个呼叫都分配了一个单独的实例(用于极端可扩展性)。每次调用该方法都会导致创建一个新的服务器对象(单独的线程)。处理完请求后(方法返回),将释放新实例。

如果您已将方法配置为使用ConcurrencyMode.Single,那么您会看到此阻止行为。

您应该考虑查看serviceThrottling配置,以确保您的应用程序正确调整。

<serviceBehaviors>
    <behavior name="throttleBehavior">
        <serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/>
    </behavior>
</serviceBehaviors>

答案 1 :(得分:0)

以下配置

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

可能并不总是立即为每个调用创建服务上下文。如果使用的绑定是会话启用且服务实现IDispose,则客户端调用将排队,而已有另一个客户端的服务实例。因此,请检查案例中的绑定详细信息。