gpt4 book ai didi

c# - WCF 没有正确超时?

转载 作者:可可西里 更新时间:2023-11-01 08:34:21 24 4
gpt4 key购买 nike

我遇到超时问题,这些是详细信息:

我的绑定(bind)配置如下所示:

<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: Could not connect to net.tcp://10.0.0.82:4466/MegaMatcherWcf. The connection attempt lasted for a time span of 00:00:03. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.0.0.82:4466

如果我在打开机器的情况下尝试相同的测试,但没有运行监听软件,我会得到预期的行为,连接在 3 秒后超时。为什么机器关机要30秒,然后告诉我用了3秒?

最佳答案

比@BiggsTRC(他的回答大致正确)更具体一点:

  • WCF 将详细信息委托(delegate)给 System.Net.Sockets 类建立传输层连接一个 NetTcpBinding channel ;
  • System.Net.Sockets 是非托管 WINSOCK API 的包装;
  • WINSOCK API 有内部默认超时,但没有提供任何记录的机制来指定某些阻塞操作的超时,包括 WSAConnect(),.NET Socket.Connect() 方法使用;
  • WCF 代码(在 System.ServiceModel.Channels.SocketConnectionInitiator.Connect() 中)调用 Socket.Connect,如果这引发了某些类型的异常,它检查其连接超时时间是否还有剩余时间。如果不存在,您将收到一个 EndpointNotFoundException,其中包含您看到的错误消息;
  • WCF 使用 TimeoutHelper 类来跟踪超时时间并进行时间计算。它有一个名为 ElapsedTime 的方法,但这是用词不当,因为它永远不会返回大于原始超时期限的值:这就是错误消息向您谎报连接尝试所用时间的原因。

WCF 可以通过使用套接字 API 的异步方法来强制执行其配置的超时,在单独的线程上监视连接尝试的超时,但它目前没有这样做。如果您认为这是一个错误(可以说是),您可以在 Microsoft's Connect Site 上报告它。并可能在未来的版本或服务包中修复它。

关于c# - WCF 没有正确超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5966315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com