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 не правильно рассчитывает время?