请求堆积在WCF IIS服务器中

Akh*_*esh 5 c# iis wcf

我们正在使用BasicHttpBinding服务,我们还将并发模式设置为多个,并将实例上下文模式设置为单个,如下所示

 [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
 ConcurrencyMode =ConcurrencyMode.Multiple)]
public class Service1 : IService1
Run Code Online (Sandbox Code Playgroud)

我们通过引用在控制台中使用了此服务.我们遇到一个问题,经过一段时间后,我们看到IIS工作进程中的消息被填充.

例如 - >在1分钟内,它在IIS中的工作进程中只显示一个线程,但一段时间后我们在IIS中看到多个请求?

任何人都可以帮助这里,为什么一段时间后我们看到在IIS中排队的消息?

以下是配置中的绑定

<binding name="BasicHttpBinding_Common" 
        closeTimeout="00:10:00" openTimeout="00:10:00" 
        receiveTimeout="00:10:00" sendTimeout="00:10:00" 
        allowCookies="false" bypassProxyOnLocal="false" 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Pop*_*opo 1

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
 ConcurrencyMode =ConcurrencyMode.Multiple)]
Run Code Online (Sandbox Code Playgroud)

指定可用于处理传入消息中包含的调用的服务实例数: InstanceContextMode.Single - 仅一个 InstanceContext 对象用于所有传入调用,并且在调用后不会回收。如果服务对象不存在,则创建一个。

指定服务类是否支持单线程或多线程操作模式: ConcurrencyMode.Multiple - 服务实例是多线程的。不提供同步保证。由于其他线程可以随时更改您的服务对象,因此您必须始终处理同步和状态一致性。你有责任用锁来保护你的状态。服务实现必须是线程安全的才能使用此并发模式。

您可以尝试添加UseSynchronizationContext = false到您的ServiceBehavior. 如果这没有帮助,您可以尝试将ReleaseServiceInstanceOnTransactionComplete=true或添加false到您的ServiceBehavior. 我不确定如果 InstanceContextMode 是多个,您是否可以设置为 true。

由于使用 ConcurrencyMode.Multiple 不进行同步保证,并且 UseSynchronizationContext 的默认值为 true,因此它可能会尝试处理同一线程上的所有调用,从而导致队列。

您用来调用该服务的代码也可能存在一些问题。如果没有看到我们就不会知道。

可能只是需要一点时间来为每个调用启动一个线程?在你的图片中,最长的请求只有 5.5 秒。(我知道对于一个简单的调用来说这很长。)

这也可能是有洞察力的:/sf/answers/328926951/