我目前正尝试使用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>
有任何帮助吗?这个例外让我发疯了!
答案 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”
但是当我尝试不同的客户时:
它有效。因此,对于相同的客户端连接存在某种限制。