我的 WCF 服务库作为 Windows 服务托管,应该处理来自多个客户端的请求。
客户经常提出的一个请求是相当耗费资源的。
我对上述场景有两个疑问:
谢谢!
最佳答案
在您的默认方案中,WCF 服务主机(托管您的服务类的事物)将为每个传入的请求创建一个新的服务类实例,并让它处理请求(“每次调用”激活)。
您可以使用 serviceThrottling
调整这些并发事件服务类实例的最大数量。服务器上的行为。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ThrottledServiceBehavior">
<serviceThrottling
maxConcurrentCalls="25"
maxConcurrentSessions="25"
maxConcurrentInstances="25"/>
</behavior>
</serviceBehaviors>
</behaviors>
Kenny Wolf 的 blog post here 中对服务限制行为的选项及其默认值有很好的解释。 .
此外,设置
InstanceContextMode
和 ConcurrencyMode
你的服务类(实现服务契约)对你的服务如何处理并发和多个请求有很大的影响。[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,
ConcurrencyMode=ConcurrencyMode.Single)]
class YourServiceClass : IYourService
{
.....
}
InstanceContextMode
应该是 PerCall
(每个调用请求都会获得一个新的、单独的实例),然后是 ConcurrencyMode
可以是Single
(这是最容易开发的)。InstanceContextMode
也可以是 PerSession
如果您需要基于 session 的方法(不是很常见),或 Single
(您的服务类将是一个单例 - 非常不鼓励使用它,除非您绝对、肯定地必须了解它的所有怪癖和问题!)。ConcurrencyMode
也可以是 Reentrant
(仅与双工契约(Contract)和绑定(bind)相关)或 Multiple
(多线程单例服务类 - 高风险且难以开发!)。马克
关于WCF - 处理来自多个客户端的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1543049/