WCF + NetTcp:高负载使通道停止工作(通话/秒速率)
首先,对不起,我不流利。WCF + NetTcp:高负载使通道停止工作(通话/秒速率)
我想弄清楚为什么我的WCF服务停止工作时,我们有一个高通话/秒率的环境。我不确定只是增加超时将解决问题。
我们有2个web服务:
- 首先是在IIS 7.5托管,在Windows Server 2008 R2企业版SP1 64位,与AppFabric的(和WAS)
- 二,托管在Windows服务时,Windows 2003 R2 SP1 x86的
两个web服务具有最低配置:不认证,不trasaction,不需特殊治疗的消息..检查结合:
<netTcpBinding>
<binding transactionFlow="false">
<security mode="None">
<message clientCredentialType="None" />
<transport clientCredentialType="None"></transport>
</security>
<reliableSession enabled="false"/>
</binding>
</netTcpBinding>
我们试图使用Net.Tcp绑定,因为它的可靠性和速度。
FACT 1 - net.tcp绑定是主要原因
当负载较高时,信道的net.tcp停止工作。而已!但BasicHttp仍然像魅力一样工作。
WindowsService:通道net.tcp在返回工作前持续几分钟(3m - 10m)(BY AREELF,没有我们改变任何东西。哥布林正在努力工作)。
AppFabric/IIS/WAS:通道net.tcp保持关闭状态。需要手动重启。
的basicHttpBinding的配置类似于的net.tcp:没有任何处理的消息,whitout安全问题或类似的东西。
FACT 2 - 没有任何形式记录
的,我们找不到任何一种,尖,招弄清楚发生了什么。我曾尝试转储内存,事件日志,System.Diagnostics和没有任何相关。最相关的技巧是从SMSvcHost 4.0.0.0错误:
,同时派遣一个复制套接字时出现错误:这个处理 现在在这个过程中泄露。 ID:2272源: System.ServiceModel.Activation.TcpWorkerProcess/62875109异常: System.TimeoutException:此发送到 http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous 没有收到配置的超时(00:01:00)中的答复请求操作。分配给此操作的 时间可能是更长时间的更长时间的一部分。这可能是因为该服务仍在处理 操作或者因为该服务无法发送回复消息。 请考虑增加操作超时(将 频道/代理投射到IContextChannel并设置OperationTimeout 属性),并确保服务能够连接到 客户端。
服务器堆栈跟踪:在 System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult的结果)
处 System.ServiceModel System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult 结果)。 Channels.ServiceChannel.EndCall(字符串动作, 对象[]奏,IAsyncResult的结果)在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeEndService(IMethodCallMessage 包括methodCall,ProxyOperationRuntime操作)在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天 消息)在异常重新抛出[0]:在 System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult的结果)
在 System.ServiceModel.Activation.WorkerProcess.EndDispatchSession(IAsyncResult的 结果)进程名称:SMSvcHost进程ID :1532
您有任何提示或配置方法可以帮助我解决此问题吗?
什么是高负载场景的最佳配置?
如果您在Visual Studio中或使用svcutil工具生成服务引用,请确保始终调用代理的Close或Abort方法。前几天我遇到了类似的问题,因为我忘记了调用这些方法。
你是对的!新的消费者不会“中止”/关闭连接。你(或某人)是否知道消费者的其他技术(如Java/Php)是否可以正确处理中止/关闭?非常感谢。接下来的两周我们将检查我们服务的所有消费者。如果在这次变更之后,我们不会遇到更多相关问题,我会将此答案标记为正确。非常感谢。 –
我不认为Java/PHP客户端可以做到这一点。最好的选择可能是为你的服务创建一个新的BasicHttpBinding端点,并且告诉你的Java/PHP客户端使用这个特定的端点。 – schglurps
你说得对。我已经对我的Windows服务net.tcp做了性能测试,最近启用了wcf。我们使用和不使用Close()方法的区别是显而易见的。谢谢你的提示!! –
只有一个评论,但我的猜测是IIS排队HTTP而不是TCP – Paparazzi
您是否尝试过WCF跟踪? http://msdn.microsoft.com/en-us/library/ms733025.aspx –
你是如何产生沉重的负载?和多少负载? (10个呼叫/秒,100个呼叫/秒,500个呼叫/秒...)。多久采取你的方法?正如schglurps所说,你可能已经达到WCF中最大并发呼叫/会话/实例的限制。 – Cybermaxs