我如何配置一个WCF服务与PerCall实例上下文一起运行



这是背景信息。我有一个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,那么当已经有另一个客户机的服务实例时,客户机调用将排队。所以,在你的例子中,检查绑定细节

相关内容

  • 没有找到相关文章

最新更新