Задержка/возобновление WF4 в WorkflowServiceApplication на IIS5 и 6

У меня есть рабочий процесс, размещенный в приложении WorkflowServiceApplication, работающем на IIS5 (производственной средой будет IIS6) с постоянной базой данных. Это служба запроса/утверждения, поэтому есть задержка (несколько дней) в ожидании утверждения, и если эта задержка проходит без утверждения, рабочий процесс отправляет электронное письмо утверждающему. Я заметил, что ожидающие рабочие процессы «пробуждаются» и отправляют свои электронные письма только в том случае, если я запускаю новый запрос (т.е. новый экземпляр рабочего процесса). Я предполагаю, что при запуске нового потока что-то проверяет хранилище экземпляров на наличие экземпляров, которые должны возобновиться, и возобновляет их. Я только что заметил проблему, потому что ранее я тестировал задержки, которые составляли всего несколько минут, а не дней. Я еще не пробовал это на IIS6, но я ожидаю, что это будет то же самое.

q1) мне нужно написать консольное приложение или что-то еще, чтобы периодически проверять и возобновлять потоки, и если да, то может ли кто-нибудь посоветовать, как это сделать? Или я просто сделал что-то не так?

q2) Предполагая, что ответ на Q1 «да, вам нужно что-то написать», если бы я использовал IIS7 и AppFabric (что может быть возможно), сон/возобновление просто работало бы без необходимости писать какой-либо код для проверки и возобновления потоки? то есть просто разверните службу рабочего процесса в AppFabric, и она заработает?

Заранее спасибо.


person Nix    schedule 28.04.2011    source источник


Ответы (2)


Ответ на q1 – да. После перезапуска домена приложений IIS он не перезапускается до тех пор, пока для него не будет получен внешний запрос. В результате WorkflowServiceHost не активен, и действия Delay с истекшим сроком действия не будут возобновлены. В версиях IIS до 7 вам необходимо создать внешний запрос, чтобы убедиться, что WorkflowServiceHost доступен. Самый простой способ сделать это — заставить службу Windows периодически извлекать страницу WSDL.

При обновлении до IIS7 и AppFabric можно настроить автоматический запуск службы при запуске IIS, и это решит ту же проблему. Я бы предпочел этот вариант, поскольку AppFabric дает вам множество дополнительных преимуществ, таких как отслеживание.

person Maurice    schedule 28.04.2011
comment
Еще вопрос: я думаю, что мне нужно иметь AppFabric, чтобы автоматически возобновлять службы рабочего процесса, если IIS по какой-то причине остановлен. Но если у меня нет AppFabric, возобновятся ли мои отложенные потоки, если IIS работает в IIS7? И если IIS остановится, могу ли я как-то возобновить свои потоки вручную? (На какое-то время меня поместили в другой проект, поэтому я просто пытаюсь возобновить) - person Nix; 25.05.2011
comment
Я так понимаю, вы имеете в виду, что IIS или ваш пул приложений перезапущены, потому что, если он не запущен, он ничего не может сделать. Вам нужно убедиться, что WorkflowServiceHost запущен и работает, и он возобновит просроченные действия Delay. Без AppFabric самый простой способ сделать это — заставить какое-либо другое приложение (служба Windows) периодически загружать WSDL из службы, так как это загрузит WSH, если он еще не загружен. - person Maurice; 25.05.2011
comment
Ага, спасибо, похоже, что нам действительно нужна App Fabric, поскольку я пытался избежать трюка с wsdl, но наш ИТ-отдел немного сопротивляется, поскольку никто из нас на самом деле не знает, как установить AppFabric. Я хочу, чтобы мое хранилище сохраняемости было на отдельном сервере (у нас уже есть другой сервер с установленным SQL-сервером). Разрешает ли это AppFabric или будет настаивать на установке SQL Express при установке его на нашем сервере IIS7? - person Nix; 25.05.2011
comment
И нужна ли нам установка WAS? - person Nix; 25.05.2011

Да Служба управления рабочими процессами Windows Server AppFabric будет активировать рабочие процессы с ожидающими таймерами. Вы получаете это бесплатно, а также другие вкусности.

person Ron Jacobs    schedule 29.04.2011