为什么wcf服务回调太慢(特别是第一次)

时间:2012-08-17 14:27:17

标签: c# wcf .net-4.0 callback app-config

我有一项服务,每秒向连接的客户端发送几个回调。为什么当服务发送消息时客户端会在几秒或更长时间内收到消息?

以下是配置详情:

        <bindings>
                  <wsDualHttpBinding>
                    <binding name="WSDualHttpBinding_IMyService" receiveTimeout="00:30:00" 
    sendTimeout="00:30:00" useDefaultWebProxy="false" maxBufferPoolSize="2147483647" 
maxReceivedMessageSize="2147483647">

                      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                      <security mode="None"/>
                    </binding>
                  </wsDualHttpBinding>
                </bindings>
                <behaviors>
                  <serviceBehaviors>
                    <behavior name="Service1Behavior">
                      <serviceMetadata httpGetEnabled="True"/>
                      <serviceDebug includeExceptionDetailInFaults="True"/>
                      <serviceThrottling maxConcurrentCalls="10"
                                maxConcurrentInstances="10"
                                maxConcurrentSessions="5" />
                    </behavior>
                  </serviceBehaviors>
                </behaviors>

2 个答案:

答案 0 :(得分:1)

您描述的内容可能与线程创建时间有关 见这里:WCF service may scale up slowly under load

“根据执行时间和收到的请求数量,您可能会注意到,对于每个收到的请求,WCF执行时间会线性增加大约500ms,直到进程创建了足够的IOCP线程来为请求提供服务或维持传入的负载。”

文章中提供了一种解决方法。

答案 1 :(得分:0)

我正在处理同样的问题,查看这些链接以解决问题。

概述似乎是开箱即用的WCF被“锁定”以防止DoS漏洞。基本上,您需要按照以下链接中的描述取消限制服务。

http://theburningmonk.com/2010/05/wcf-improve-performance-with-greater-concurrency/

http://blogs.msdn.com/b/wenlong/archive/2010/02/11/why-are-wcf-responses-slow-and-setminthreads-does-not-work.aspx

http://weblogs.asp.net/sweinstein/archive/2009/01/03/creating-high-performance-wcf-services.aspx