NettcpBinding wcf - 如何提高检测故障的时间

NettcpBinding wcf - how to improve the time of detect faulted

我有一个连接到 wcf 服务器以获取时间异步的应用程序。

用于通过 tcp 保持连接。

所以我想取消与服务器的连接,所以我注册到事件错误。

到目前为止一切正常,但我发现断开连接的检测总是大于或等于 20 deconds,我想改进它,我想也许可以通过更改 nettcp 的设置,如下所示:

 <netTcpBinding>
    <binding name="NetTcpBindingConf" closeTimeout="00:00:05" openTimeout="00:00:05" sendTimeout="00:00:10" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="20" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="5048576" maxArrayLength="50000" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
      <reliableSession ordered="true" inactivityTimeout="00:04:00" enabled="true"/>
      <security mode="Transport">
        <transport clientCredentialType="None" protectionLevel="EncryptAndSign"/>
        <message clientCredentialType="Windows"/>
      </security>
    </binding>
  </netTcpBinding>

我改成:

 <netTcpBinding>
    <binding name="NetTcpBindingConf" closeTimeout="00:00:05" openTimeout="00:00:05" sendTimeout="00:00:05" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="20" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="5048576" maxArrayLength="50000" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
      <reliableSession ordered="true" inactivityTimeout="00:00:05" enabled="true"/>
      <security mode="Transport">
        <transport clientCredentialType="None" protectionLevel="EncryptAndSign"/>
        <message clientCredentialType="Windows"/>
      </security>
    </binding>
  </netTcpBinding>

不过好像还是大于等于20秒..

我可以如何改进?

我没有看到您为绑定设置了 receiveTimeout。根据我的经验,这是最重要的之一。 也将其设置为 5 秒。

sendTimeout 是关于等待消息发送的时间。所以,除非你发送任何东西(调用一个方法),否则没有什么可监控的。 receiveTimeout 正好相反 - 等待多长时间才放弃。