WCF - 处理来自多个客户端的请求

时间:2009-10-09 10:40:10

标签: wcf clients

我的WCF服务库作为Windows服务托管,应该处理来自多个客户端的请求。 客户经常要做的一个请求是资源密集型。

我有两个与上述场景有关的疑问:

  1. WCF服务如何处理多个客户端的请求?
  2. 是否有任何WCF配置可以提高流程效率?
  3. 谢谢!

1 个答案:

答案 0 :(得分:11)

在默认情况下,WCF服务主机(托管服务类的东西)将为每个进入的请求创建服务类的新实例,并允许处理请求(“每次调用”激活)

您可以使用服务器上的serviceThrottling行为调整这些并发活动服务类实例的最大数量。

<system.serviceModel>
   <behaviors>
      <serviceBehaviors>
         <behavior name="ThrottledServiceBehavior">
            <serviceThrottling 
                maxConcurrentCalls="25" 
                maxConcurrentSessions="25"
                maxConcurrentInstances="25"/>
         </behavior>
      </serviceBehaviors>
   </behaviors>

对Kenny Wolf的blog post here中服务限制行为及其默认值的选项有一个非常好的解释。

此外,在服务类(实现服务合同)上设置InstanceContextModeConcurrencyMode会对服务处理并发和多个请求的方式产生很大影响。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall, 
                 ConcurrencyMode=ConcurrencyMode.Single)]
class YourServiceClass : IYourService
{
  .....
}

InstanceContextMode应为PerCall(每个调用请求都会获得一个新的独立实例),然后ConcurrencyMode可以是Single(这是最容易开发的)。< / p>

InstanceContextMode如果您需要基于会话的方法(不常见),或PerSession(您的服务类是单身人士 - 非常不鼓励使用此方法,也可能是Single,除非你绝对,积极地了解并了解它的所有怪癖和问题!)。

ConcurrencyMode也可能是Reentrant(仅与双工合同和绑定相关)或Multiple(多线程单件服务类 - 风险高且难以开发!)。

马克