我有一个使用ipc绑定的wcf windows服务,客户端是一个IIS web服务。在调试过程中,我不断收到以下错误:
发生了System.TimeoutException 消息:抛出异常:' System.TimeoutException'在System.ServiceModel.dll中 附加信息:管道连接已中止,因为管道的异步读取未在分配的超时00:02:00内完成。分配给此操作的时间可能是较长超时的一部分。
奇怪的是它不会在客户端上造成任何错误。并且在通话中放置断点并没有帮助或被触发。
我尝试编辑Visual Studio 2015的异常设置以打破此异常。确实如此,但是没有源代码可用"显示。
最后奇怪的是,我已将服务器和客户端的所有超时编辑为30秒,并且在2分钟时仍然失败。
服务器配置:
<netNamedPipeBinding>
<binding name="ipcBinding" closeTimeout="00:00:30" openTimeout="00:00:30"
receiveTimeout="00:00:30" sendTimeout="00:00:30" maxConnections="10000"
maxReceivedMessageSize="1073741824">
<readerQuotas maxDepth="0" maxStringContentLength="0" maxArrayLength="52428800"
maxBytesPerRead="0" maxNameTableCharCount="0" />
</binding>
</netNamedPipeBinding>
...
<serviceBehaviors>
<behavior name="MyService">
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="5242880" />
<serviceThrottling maxConcurrentCalls="10000" maxConcurrentSessions="5000"
maxConcurrentInstances="5000" />
<serviceTimeouts transactionTimeout="00:00:30" />
</behavior>
</serviceBehaviors>
客户端配置:
<netNamedPipeBinding>
<binding name="ipcBinding" closeTimeout="00:00:30" openTimeout="00:00:30"
receiveTimeout="00:00:30" sendTimeout="00:00:30" maxConnections="5000"
maxReceivedMessageSize="1073741824">
<readerQuotas maxArrayLength="52428800" />
</binding>
</netNamedPipeBinding>
编辑:我使用.NET 4.6(控制台应用)创建了一个全新的客户端,它工作正常,错误永远不会出现。但是我已经将其缩小到仅在我的WinForms客户端进行远程调用时才发生。两者都使用完全相同的ClientBase实现,并包含在using
语句中。