我有超时问题,这些是详细信息:
我的绑定配置如下所示:
<netTcpBinding>
<binding name="WindowsServerOverTcp"
maxReceivedMessageSize="10000000"
maxBufferSize="10000000"
maxBufferPoolSize="10000000"
closeTimeout="00:00:03"
openTimeout="00:00:03"
sendTimeout="00:00:03"
receiveTimeout="00:00:03">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="None">
</security>
</binding>
</netTcpBinding>
我正在向服务器发送一条消息,我知道该服务器已关闭,因此连接应该在我的app.config中规定的3秒后超时,但由于某种原因它需要20-30秒。
当抛出EndPointNotFoundException时,这是我得到的信息:
System.ServiceModel.EndPointNotFoundException: 无法连接到 的net.tcp://10.0.0.82:4466 / MegaMatcherWcf。 连接尝试持续了一段时间 时间跨度00:00:03。 TCP错误代码 10060:连接尝试失败 因为关联方没有 经过一段时间的正确回应 时间,或建立的连接失败 因为连接主机失败了 回复10.0.0.82:4466
如果我在打开机器时尝试相同的测试,但没有正在运行的监听软件,我会得到预期的行为,3秒后连接超时。为什么如果机器关闭需要30秒,然后告诉我花了3秒钟?
答案 0 :(得分:16)
比@BiggsTRC更具体一点(答案大致正确):
System.Net.Sockets
类详细说明
建立传输层连接
NetTcpBinding渠道; System.Net.Sockets
是非托管WINSOCK API的包装器; WSAConnect()
方法使用的Socket.Connect()
; System.ServiceModel.Channels.SocketConnectionInitiator.Connect()
中)调用Socket.Connect
,如果这会引发某些类型的异常,它会检查其连接超时期间是否有剩余时间。如果没有,则会收到EndpointNotFoundException
,并显示您看到的错误消息; TimeoutHelper
类来跟踪超时时间并进行时间算术。这有一个名为ElapsedTime
的方法,但这是一个用词不当,因为它永远不会返回大于原始超时时间的值:这就是错误消息告诉你连接尝试花了多长时间的原因。WCF可以通过使用套接字API的异步方法来强制执行其配置的超时,监视单独线程上的超时以进行连接尝试,但它当前不会这样做。如果您认为这是一个错误(可以说是错误的),您可以在Microsoft's Connect Site上报告,也许可以在将来的版本或服务包中修复它。
答案 1 :(得分:9)
我相信你现在正处理Windows超时问题,而不是你的WCF超时。 Windows将花费20-30秒来确定计算机在网络上没有响应。当您调用WCF服务器时,Windows首先必须建立到服务器的路由。当它不能时,它会警告您的软件,并且您的软件认为它已达到自己的超时。您的系统永远不会到达实际轮询点以查看服务是否正在运行,因为Windows仍在尝试在该IP地址的另一端找到某些内容。
答案 2 :(得分:1)
我遇到了同样的问题
每件事,尝试过每一种配置都没有任何帮助。
互联网上的net.tcp在漫长的过程中超时了
唯一帮助我的是我使用时
双工或回拨消息交换模式