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

标签 wcf clients

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

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

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

  • 谢谢!

    最佳答案

    在您的默认方案中,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如果您需要基于 session 的方法(不是很常见),或 Single (您的服务类将是一个单例 - 非常不鼓励使用它,除非您绝对、肯定地必须了解它的所有怪癖和问题!)。
    ConcurrencyMode也可以是 Reentrant (仅与双工契约(Contract)和绑定(bind)相关)或 Multiple (多线程单例服务类 - 高风险且难以开发!)。

    马克

    关于WCF - 处理来自多个客户端的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1543049/

    相关文章:

    iphone - 有人对向客户提交 iPhone 应用程序提案有什么建议吗?

    javascript - 如何根据数据库值显示设置访问权限和显示/隐藏div

    c# - 如何在 Windows Azure 中部署 WCF

    c# - 类型 '*' ,作为 ServiceHost 指令中的 Service 属性值提供,或在配置元素中提供 * 无法找到

    c# - 在 C# 中通过 WCF 访问需要证书的 Web 服务 (HTTPS)

    java - 服务器不接收来自多个客户端的数据(java套接字)

    c - 限制和识别客户端 TCP

    sockets - 指定连接到 PHP CLI 套接字服务器的客户端的远程 IP 地址

    WCF 与 WSHttpBinding、消息安全、clientCredentialType ="UserName"证书自托管问题