Ошибка WCF: соединение с сокетом было прервано - PullRequest
0 голосов
/ 04 декабря 2018

Я размещаю соединение WCF, используя topshelf, а конфигурации служб используют поведение и соединение tcp, как показано ниже:

<behaviors>
  <serviceBehaviors>
    <behavior name="MetaDataBehvior">
      <serviceMetadata />
    </behavior>
    <behavior>
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

<bindings>
  <netTcpBinding>
    <binding name="NetTcpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
      <security mode="Transport">
        <!--Transport security is enabled Because all machinses on the same Domain (intranet) -->
        <!-- http://www.karthikscorner.com/sharepoint/wcf-transport-security/ -->
        <!--Transport security is enabled-->
          <transport clientCredentialType="Windows"
                    protectionLevel="EncryptAndSign" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>

Я пытался даже использовать троттлинг, но ничего не изменилось после нескольких использований службы, я получил ошибку:

Произошла одна или несколько ошибок.

System.AggregateException: произошла одна или несколько ошибок.---> System.ServiceModel.CommunicationException: соединение с сокетом было прервано.Это может быть вызвано ошибкой обработки вашего сообщения или превышением тайм-аута приема удаленным хостом, или проблемой основного сетевого ресурса.Тайм-аут локального сокета был '00: 00: 59.9844041 '.---> System.IO.IOException: операция записи не выполнена, см. Внутреннее исключение.---> System.ServiceModel.CommunicationException: соединение с сокетом было прервано.Это может быть вызвано ошибкой обработки вашего сообщения или превышением тайм-аута приема удаленным хостом, или проблемой основного сетевого ресурса.Тайм-аут локального сокета был '00: 00: 59.9844041 '.

любой совет, как отследить или исправить это

1 Ответ

0 голосов
/ 04 декабря 2018

WCF содержит несколько классов, которые вы можете использовать для отслеживания / отладки вашего приложения.

Первое - это включение трассировки / регистрации сообщений, вы можете использовать SvcConfigEditor, чтобы сделать вашу жизнь проще enter image description here

Затем просто перейдите в раздел EndToEnd Tracing и отредактируйте конфигурацию в соответствии с вашими потребностями.

, используя трассировку в сочетании с обменом сообщениями, даст вам возможность связать messageID (guid) с созданной трассировкой, и в некоторых случаях найдите сообщение, вызывающее проблемы.

Другая вещь, которую вы можете проверить, - это включить тег ServiceAudit в настройках ServiceBehavior,это позволит вам проверять события безопасности, возникающие в вашей службе.

enter image description here

...