WCF EndpointNotFoundException занимает больше времени, чем TimeoutException

Я настроен на группу сервисов, каждый из которых общается друг с другом; с приведенной ниже привязкой я бы предположил, что если I "A" отправит сообщение "B"(живым) и "C"(не живым), то B вернется, если обработка не займет больше времени, чем определено sendTimeout, в противном случае это будет TimeoutException. В случае сбоя "C", который недоступен, я бы предположил, что он также вернется в течение определенного времени sendTimeout. Для "B" это кажется правильным, но для "C" возникает исключение EndpointNotFoundException, но оно занимает намного больше, чем 5 секунд, определенных для sendTimeout. Я что-то упустил в моей конфигурации. Такая же привязка используется для сервиса и клиента

<bindings>
  <netTcpBinding>
    <binding name="SSS" maxBufferPoolSize="524288" maxBufferSize="134217728" maxReceivedMessageSize="134217728" receiveTimeout="infinite" sendTimeout="00:00:05" portSharingEnabled="true">
      <readerQuotas
         maxDepth="32"
         maxStringContentLength="65535"
         maxArrayLength="16384"
         maxBytesPerRead="4096"
         maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" protectionLevel="None"/>
        <message clientCredentialType="None"/>
      </security>
      <reliableSession ordered="true"/>
    </binding>
  </netTcpBinding>
</bindings>


<service behaviorConfiguration="DefaultBehavior" name="hostObj"> 
    <endpoint binding="netTcpBinding" bindingConfiguration="SSS" contract="Contract.IHost" />
  </service>


<endpoint name="serverAppHostEndpoint" binding="netTcpBinding" bindingConfiguration="SSS" contract="Contract.IHost" />


<behaviors>
  <serviceBehaviors>
    <behavior name="DefaultBehavior">
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="False" />
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true.  Set to false before deployment 
      to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

1 ответ

Я не уверен на 100%, но вы можете столкнуться с тем фактом, что при выполнении клиента WCF время, используемое ОС для определения IP-адреса, не учитывается в параметре SendTimeout. Вы можете увидеть более подробную информацию здесь: WCF не правильно рассчитывает время?

Другие вопросы по тегам