Рабочий процесс как служба WCF неожиданно останавливается - PullRequest
1 голос
/ 26 февраля 2010

У нас есть .Net 3.5 Workflow, размещенный как сервис, который иногда неожиданно останавливается. Это происходило время от времени при записи файла и совсем недавно при получении ответа от другой службы WCF. Не обнаруживаются исключения, так как все они регистрируются, и в журналах событий на сервере, где они оба размещаются, нет сообщений. Я добавил логирование, чтобы убедиться, что сервис завершает свою логику, что и происходит (около 6 минут). Все мои таймауты намного выше, чем они должны быть. Я начинаю думать, что проблема может заключаться в том, что канал закрывается, и из-за очень большого времени ожидания ошибка еще не выдается. Потенциально актуальный рабочий процесс вызывает асинхронный вызов службы wcf, а затем использует WaitOne () в AsyncWaitHandle. У меня есть ощущение, что это, возможно, не лучшая идея, но я не уверен, что это может вызвать эту проблему. Кроме того, постоянство не настроено в рабочем процессе (ранее я думал, что параметр unloadOnIdle мог вызывать проблемы с получением возвращаемых значений из вызываемой службы, так как я не очень понимаю, как это должно работать).

Любая помощь / совет будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2010

В рабочем процессе App.config (отсутствует таймаут для размещения рабочего процесса?):

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IService" closeTimeout="00:02:00"
      openTimeout="00:02:00" receiveTimeout="04:00:00" sendTimeout="04:00:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="655360000" maxBufferPoolSize="2147483647" maxReceivedMessageSize="655360000"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://url/Service.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
    contract="DALService.IService" name="BasicHttpBinding_IService" />
</client>

В WCF DalService web.config:

<httpRuntime
    maxRequestLength="1048576"
    executionTimeout="6000000"
/>
<basicHttpBinding>
<binding name ="LargeMessageBinding"
          closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="04:30:00" sendTimeout="04:30:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="655360000" maxBufferPoolSize="524288" maxReceivedMessageSize="655360000"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true"
         />
<!--maxReceivedMessageSize="6553600" -->
<!--maxBufferSize="6553600" -->

0 голосов
/ 03 марта 2010

Оказывается, рабочий процесс не размещался в собственном рабочем процессе, как я думал. Другое приложение было сбой процесса. Служба WCF была правильно настроена для использования своего собственного рабочего процесса, поэтому она будет корректно возвращаться, но уже не работает приложение.

0 голосов
/ 26 февраля 2010

Вы проверили настройки тайм-аута на клиенте. Я знаю, что раньше мне приходилось обновлять как настройки тайм-аута клиента, так и настройки сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...