【问题标题】:WCF - Handling request from multiple clientsWCF - 处理来自多个客户端的请求
【发布时间】:2009-10-09 10:40:10
【问题描述】:

我的 WCF 服务库作为 Windows 服务托管,应该处理来自多个客户端的请求。 客户经常提出的一项请求是相当耗费资源的。

我对上述场景有两个疑问:

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

谢谢!

【问题讨论】:

    标签: wcf clients


    【解决方案1】:

    在您的默认方案中,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(这是最容易开发的)。

    InstanceContextMode 也可以是 PerSession 如果您需要基于会话的方法(不是很常见),或 Single(您的服务类将是单例 - 非常不鼓励使用它,除非您绝对肯定有并了解它的所有怪癖和问题!)。

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

    马克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2016-05-24
      相关资源
      最近更新 更多