2012-02-13 4 views
2

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

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

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

System.TimeoutException, mscorlib, Version = 4.0.0.0, Culture = нейтрально, PublicKeyToken = b77a5c561934e089 Операция не завершилась в течение отведенного времени ожидания 00:00:30. Время , выделенное этой операции, могло быть частью более длинного времени ожидания . на System.Runtime.AsyncResult.End [TAsyncResult] (IAsyncResult результат) на System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle (IAsyncResult результата) при System.Runtime.AsyncResult.AsyncCompletionWrapperCallback (IAsyncResult результат) Исправление System.TimeoutException: операция не завершилась в течение отведенного времени ожидания 00:00:30. Время, отведенное для этой операции, возможно, было частью длинного таймаута . на System.Runtime.AsyncResult.End [TAsyncResult] (IAsyncResult результат) на System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle (IAsyncResult результата) при System.Runtime.AsyncResult.AsyncCompletionWrapperCallback (IAsyncResult результат)

в этой просьбе точки к http://localhost/MyWebService?wsdl также не с 404.

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

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

ответ

5

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

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

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

+0

Это было. Последующий вопрос: в каком журнале я мог бы это понять? Есть ли место, где говорится «слишком много случаев - дросселирование ...». –

+0

Морис, чтобы сделать его справедливым: http://stackoverflow.com/questions/9279252/iis-asp-net-where-can-i-see-logs-for-the-server-itself-specifically-throttl –

+1

Как вы используют IIS7, вы можете установить Windows Server AppFabric. – Maurice

Смежные вопросы