【问题标题】:Service instances in WCFWCF 中的服务实例
【发布时间】:2010-12-22 00:45:37
【问题描述】:

我正在使用 perfmon 来检查我的服务行为。我所做的是在不同的机器上启动 6 个客户端应用程序实例,并以 120 个线程(每个客户端应用程序 20 个线程)向服务器发送请求。

我检查了计数器和最大实例数(我使用 PerSession 模型并将实例数设置为 100)是 12,我认为这很奇怪,因为我的服务响应时间在 120 秒左右...我认为增加的数量实例数将导致 WCF 创建更多实例,因此响应时间会更快。

知道为什么 WCF 不创建更多的服务实例吗?

谢谢帕维尔

【问题讨论】:

    标签: wcf


    【解决方案1】:

    WCF 服务默认受到限制 - 这是一种服务行为,您可以轻松调整。

    请参阅MSDN docs on ServiceThrottling

    以下是默认值:

    <serviceThrottling 
        maxConcurrentCalls="16"   
        maxConcurrentInstances="Int.MaxValue"
        maxConcurrentSessions="10" />
    

    通过这些设置,您可以轻松控制可以处理多少会话或并发调用,并且可以确保您的服务器不会被(欺诈性)请求淹没而陷入瘫痪。

    【讨论】:

      【解决方案2】:

      呃,最后一次尝试理解那个愚蠢的 WCF。

      我现在做的是:

      • 创建启动20个线程的客户端,每个线程循环发送请求到服务。服务器上的性能计数器声称始终只创建 2 个服务对象实例。平均请求时间约为 40 秒(我在代理调用之前开始测量,在调用返回后结束)。

      • 修改该客户端以启动 5 个线程并启动该客户端的 4 个实例(以模拟前面示例中的 20 个线程行为)。性能监视器显示8 个服务对象实例 一直被创建。平均请求时间为 20 秒。

      谁能告诉我这是怎么回事?我认为服务器存在问题,它不想同时处理更多请求,但显然是客户端引起了骚动并且不想同时发送更多请求......也许有某种限制客户端一次发送超过两个请求的配置选项...(缓冲区、节流等...)

      通道工厂在每个线程中创建。

      【讨论】:

        【解决方案3】:

        您可能需要参考this article 并调整您的 WCF 配置(特别是 maxConnections)以获得所需的连接数。

        考虑使用 http://www.codeplex.com/WCFLoadTest 之类的东西来访问服务。

        此外,perfmon 只能帮助您到此为止。如果您想调试 WCF 服务,您应该查看 Windows SDK 中的 SvcTraceViewer 和 SvcConfigEditor。

        【讨论】:

        • maxConnections 属性?我应该在哪里应用它?要绑定配置?
        【解决方案4】:

        在您的服务绑定中,您将 maxconnections 设置为什么?一旦达到限制,连接调用将被阻塞。

        我认为默认是 10。

        http://msdn.microsoft.com/en-us/library/ms731379.aspx

        【讨论】:

        • 我使用我的用户定义绑定。当我将该配置属性添加到我的绑定配置时,会出现异常:无法识别的属性'maxConnections'
        • 啊,好吧 basicHttpBinding 是无连接的,所以没有那个属性。您是否尝试过上面建议的节流 marc_s?
        • 是的,我做到了。也许客户端有限制/限制设置?再一次:我在不同机器上的 6 个实例中的每个实例中运行 20 个线程......
        猜你喜欢
        • 1970-01-01
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        相关资源
        最近更新 更多