Рабочий процесс WF4 в AppFabric не возобновляется должным образом после IISreset

#workflow #persistence #workflow-foundation-4 #appfabric

#рабочий процесс #постоянство #рабочий процесс-foundation-4 #appfabric

Вопрос:

Ребята, у меня возникли некоторые проблемы с проблемой WF4. Я моделирую пакетный движок / планировщик работ после демонстрации Рона Джейкобса в его endpoint.tv веб-трансляция (http://archive.msdn.microsoft.com/wf4BatchJob ). В его примере «рабочая ветвь» просто учитывается внутри цикла while. Для моего примера я отправляю сообщение другому рабочему процессу с именем SampleEngine.xamlx, который выполняет подсчет. При каждом подсчете этот рабочий процесс перезванивает родительскому (JobScheduler.xamlx) и сообщает о выполненном прогрессе. Это работает отлично, и сейчас у меня это работает — я могу запланировать задание и наблюдать за его выполнением как на панели управления AppFabric, так и с помощью вызова QueryProgress (пара отправки / получения в моем рабочем процессе планировщика).

Проблема в том, что когда я выполняю iireset для имитации сбоя сервера или другой проблемы, рабочие процессы (sampleengine.xamlx и jobscheduler.xamlx) возвращаются в оперативный режим и отображаются как «Выполняется». Проблема в том, что ни один из них больше не отслеживает события — похоже, они где-то остановились. Кроме того, ни один из них не отвечает на служебные сообщения так же, как я обычно вижу, что службы WF отвечают, когда для текущего состояния рабочего процесса не запланировано действие приема.

Я добавил постоянные действия везде и убедился, что они сохраняются после завершения всех моих действий sendreply, но это не изменило ситуацию.

Как я уже сказал, единственные изменения, которые я внес в образец Ron, заключаются в том, что моя рабочая ветвь не находится внутри цикла while — она отправляет одно сообщение дочернему рабочему процессу (sampleengine.xamlx), чтобы запустить его. Корреляция между рабочими процессами работает должным образом, если сервер не выходит из строя во время выполнения.

Я был бы весьма признателен за любые мысли относительно того, что мне нужно здесь сделать, чтобы рабочие процессы продолжились с того места, где они остановились после IISreset. Образец Рона продолжал считать, где мой просто останавливается.

Ответ №1:

Убедитесь, что вы включили постоянное хранилище для рабочего процесса в конфигурации AppFabric. По умолчанию он не включен.

Комментарии:

1. Хитрость заключалась в том, что у меня была дочерняя служба рабочего процесса в другом приложении, и я забыл включить сохранение рабочего процесса и «сохраняться в режиме ожидания» для этой службы.