我们正在使用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)
[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/
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |