首先,对不起,我不是很流利。
我试图弄清楚为什么我的 WCF 服务在我们有一个高调用/秒速率的环境时停止工作。我不确定只是增加超时会解决问题。
我们有 2 个网络服务:
- 第一个托管在 IIS 7.5、Windows Server 2008 R2 Enterprise SP1 x64 上,带有 AppFabric(和 WAS)
- 二、托管于Windows Service,Windows 2003 R2 SP1 x86
两个 Web 服务都具有最低配置:无身份验证、无交易、无特殊处理消息.. 检查绑定:
<netTcpBinding>
<binding transactionFlow="false">
<security mode="None">
<message clientCredentialType="None" />
<transport clientCredentialType="None"></transport>
</security>
<reliableSession enabled="false"/>
</binding>
</netTcpBinding>
我们正在尝试使用 Net.Tcp 绑定,因为它的真实性和速度。
事实 1 - Net.Tcp 绑定是主要原因
当负载高时,通道 Net.Tcp 停止工作。而已!但是 BasicHttp 仍然像魅力一样工作。
WindowsService:通道 net.tcp 在恢复工作之前持续了几分钟(3m - 10m)(由它自己,没有我们改变任何东西。地精正在努力工作)。
AppFabric/IIS/WAS:通道net.tcp 保持下来。需要手动重启。
BasicHttpBinding 配置类似于 net.tcp:没有任何消息处理,没有安全问题或类似的东西。
事实 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.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult 结果) 的 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult 结果)
在 System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object [] outs, IAsyncResult result) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeEndService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)在 [0] 处重新引发异常:在 System.ServiceModel.Activation.WorkerProcess.EndDispatchSession(IAsyncResult 结果) 处的 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult
结果) 进程名称:SMSvcHost 进程 ID:1532
您有任何提示或配置技巧可以帮助我解决此问题吗?
高负载场景的最佳配置是什么?