具有高回调呼叫的WCF PollingDuplex导致新服务订阅的服务太忙

时间:2011-03-24 17:06:13

标签: c# .net wcf silverlight-4.0 pollingduplexhttpbinding

我目前正尝试使用PollingDuplex Binding和SilverLight 4.0构建双工WCF服务。

我的服务每隔1秒调用几个回调方法来连接客户端。 然而,在2个客户端连接后,新客户得到“服务位于...太忙”

我的服务使用此行为:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)]

WCF绑定配置:

<pollingDuplexHttpBinding>
  <binding name="" maxOutputDelay="00:00:01" serverPollTimeout="00:05:00"
    inactivityTimeout="02:00:00" duplexMode="MultipleMessagesPerPoll"
    maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
    maxReceivedMessageSize="2147483647">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
      maxArrayLength="2147483647" maxBytesPerRead="2147483647"
      maxNameTableCharCount="2147483647" />
  </binding>
</pollingDuplexHttpBinding>

服务行为:

<behavior name="Push">
  <serviceMetadata httpGetEnabled="true"/>
  <serviceDebug includeExceptionDetailInFaults="true"/>
  <serviceThrottling maxConcurrentCalls="2147483647"
    maxConcurrentInstances="2147483647" 
    maxConcurrentSessions="2147483647"/>
</behavior>

服务定义:

<services>
  <service name="PushService" behaviorConfiguration="Push">
    <endpoint address="" binding="pollingDuplexHttpBinding"
      contract="PushService"/>
    <endpoint address="mex" binding="mexHttpBinding" 
      contract="IMetadataExchange"/>
  </service>
</services>

有任何帮助吗?这个例外让我发疯了!

2 个答案:

答案 0 :(得分:0)

我认为该问题可能与“maxconnection”默认值2:来自System.Net有关。 您可以尝试在服务和客户端配置中添加以下配置,并检查它是否改善了结果,     

以上配置适用于客户端应用程序,但请记住PollingDuplex是一个双工通道,其中服务作为回调操作的客户端。

请找到文龙的精美博客,解释为何需要上述配置, http://blogs.msdn.com/b/wenlong/archive/2009/02/08/why-only-two-concurrent-requests-for-load-testing.aspx

答案 1 :(得分:0)

我注意到使用一个Internet Explorer时,我的PollingDuplex软件限制了10个客户端。 Windows 2008 Server R2计算机和具有许多设置的Web.config仍存在限制:

用于绑定: binding name =“pollingDuplexBinding”maxConnections =“100”

对于serviceBehaviors的行为: serviceThrottling maxConcurrentCalls =“1000”maxConcurrentInstances =“1000”maxConcurrentSessions =“1000”

和pollingDuplex maxPendingSessions =“2147483647”maxPendingMessagesPerSession =“2147483647”

但是当我尝试不同的客户时:

  • 服务器上的IE上的6个客户端
  • 在不同客户端计算机上的IE上的6个客户端
  • 此客户端计算机上的FireFox上的4个客户端

它有效。因此,对于相同的客户端连接存在某种限制。