2

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

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

现在我需要一些帮助来准确理解这种上下文模式是如何工作的。

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

我期望这种上下文模式将独立处理两个请求,并同时返回两个请求。我是否正确配置了我的服务?

4

2 回答 2

1

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

如果您已配置要使用的方法,ConcurrencyMode.Single那么您会看到这种阻塞行为。

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

<serviceBehaviors>
    <behavior name="throttleBehavior">
        <serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/>
    </behavior>
</serviceBehaviors>
于 2011-12-21T17:24:23.087 回答
0

以下配置

[服务行为(InstanceContextMode = InstanceContextMode.PerCall)]

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

于 2013-01-19T06:22:37.967 回答