Workflow Service перестает отвечать после 464 сообщений - PullRequest
2 голосов
/ 14 февраля 2012

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

Вот моя конфигурация:
1. Служба рабочего процесса WF4 (xamlx), размещенная в IIS 7 и использующая net.msmq / netMsmqBinding для транспорта (MSMQ является транзакционным).
2. Нет сохранения рабочего процессаиспользуется.
3. Я использую клиент приложения консоли для отправки сообщений в рабочий процесс (каждое сообщение создает новый рабочий процесс).4. Каждый рабочий процесс выглядит следующим образом: Ожидание сообщения START -> Ожидание сообщения END (я отправляю только сообщения START).

Если я отправляю 500 сообщений - 464 обрабатываются правильно, но выше, все сообщения переходят вlock_ * очереди, а затем перейти в очередь отравления.Я проверил журналы событий отладки, аналитики, а также сообщения и трассировки svclogs. Вот наиболее подробное сообщение, которое я получаю:

System.TimeoutException, mscorlib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken= b77a5c561934e089Эта операция не была завершена в течение заданного времени ожидания 00:00:30.Время, отведенное для этой операции, могло быть частью более длительного времени ожидания.в System.Runtime.AsyncResult.End [TAsyncResult] (результат IAsyncResult) в System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle.SyncReynRate.RuCateRime.RuCrRT.RuCWRC_Cr_RuText_RuText.RuCrCr_RuText_RasCr )TyResTyResTyResTyResTeResTyTeRuTeMaCaTaTaTaTaTaTyTyTyTyTyTyTyTeRaCaTaRaTaCaTaCaTaTaMapleraWrara CC CC RC RCоперация не завершена в течение отведенного времени 00:00:30.Время, отведенное для этой операции, могло быть частью более длительного времени ожидания.в System.Runtime.AsyncResult.End [TAsyncResult] (результат IAsyncResult) в System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle * IAsynbackync.*

в этот момент запрос к http://localhost/MyWebService?wsdl также завершается неудачно с 404.

Если я перезагружаю IIS - все возвращается в нормальное состояние до отправки 464 сообщений.

  1. Где можноЯ нахожу более подробный журнал?(У меня уже есть System.Diagnostics, настроенная на максимальное многословие)
  2. Является ли число 464 магией вообще?
  3. Что может быть причиной блокировки этого веб-сервиса?

1 Ответ

5 голосов
/ 14 февраля 2012

Похоже, вы работаете в пределах ограничений, эти настройки применяются к WF4 так же, как и к WCF. Параметр maxConcurrentInstances устанавливает максимальное количество экземпляров рабочего процесса, которые могут находиться в памяти в данный момент времени.

<behaviors> 
  <serviceBehaviors> 
    <behavior name="WorkflowServiceBehavior"> 
      <!-- Specify throttling behavior -->
      <serviceThrottling maxConcurrentInstances="1000"/> 
    </behavior>
  </serviceBehaviors>
</behaviors>

Кроме того, вы всегда должны использовать постоянство при размещении в IIS. Рано или поздно IIS собирается перезапустить AppDomain, и если WorkflowServicehost не сможет сохранить состояние экземпляров рабочего процесса на диск, они будут потеряны. Это также будет означать, что неиспользуемые экземпляры рабочего процесса могут быть удалены из памяти и не учитываются в параметре maxConcurrentInstances, который является ограничением в памяти.

...