почему служба WCF перестает работать каждые 20 минут? - PullRequest
0 голосов
/ 21 апреля 2011

Я новичок в wcf и mulit-thread, и я пишу службу wcf, размещенную в IIS7, в этой службе есть долго выполняющаяся задача (System.Threading.Tasks.Task), которая, вероятно, будет работать 20 часов. ,

Но эта служба wcf всегда перестает работать каждые 20 минут.

Я заставляю wcf отправлять мне электронные письма, когда запущены application_stop и application_start. Поэтому я получаю электронное письмо, когда оно запускается, а затем через 20 минут я получаю сообщение о том, что служба остановлена.

Я действительно не могу понять, почему это происходит, почему сервис останавливается каждые 20 минут.

Службы wcf останавливаются каждые 20 минут или поток задач останавливается каждые 20 минут?

Повлияет ли какая-либо конфигурация IIS7 на время работы wcf?

Я пытаюсь установить значение receiveTimeout для каждого большого промежутка времени и использую вызов asych для вызова wcf на стороне клиента, но это не помогает.

Ребята, мне очень нужна помощь, большое спасибо.

Следующий код принадлежит веб-сайту, который вызывает эту услугу wcf

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IMailingService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="24.20:31:23.6470000" sendTimeout="00:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
          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://localhost:92/MailingService.svc" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_IMailingService" contract="MalingService.IMailingService"
        name="BasicHttpBinding_IMailingService" />
    </client>
  </system.serviceModel>

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

Тайм-аут простоя пула приложений IIS по умолчанию составляет 20 минут. Вы можете настроить время простоя пула приложений, выполнив следующие шаги, которые я выбрал из этой статьи - http://technet.microsoft.com/en-us/library/cc771956(WS.10).aspx

  • Открыть диспетчер IIS.
  • разверните узел сервера и щелкните Пулы приложений.
  • На странице «Пулы приложений» выберите пул приложений, для которого вы хотите указать параметры времени ожидания, а затем нажмите «Дополнительные параметры» на панели «Действия».
  • В поле Время ожидания (минуты) введите количество минут и нажмите кнопку ОК.

Как сказал повторный анализ, хост IIS - не лучший вариант для вашего сценария, лучше использовать WAS в службе Windows.

2 голосов
/ 21 апреля 2011

IIS - плохой выбор для размещения долго выполняемой задачи.Если это ровно через 20 минут, я бы подумал, что iis закрывает поток владельца, но это предположение.Я бы действительно посоветовал перейти на среду размещения Windows службы wcf.

1 голос
/ 21 апреля 2011

Я использую дешевую службу поддержки cron, чтобы запускать обработчик в моем приложении каждые 5 минут. Это помогает поддерживать бассейн в живых. Если вы не хотите уходить от IIS, это быстрое и «грязное» исправление.

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