InstanceLockedException: как решить проблемы с блокировкой в ​​WF 4.0? - PullRequest
0 голосов
/ 18 марта 2012

Справочная информация: Я использую WF 4.0. Мое веб-приложение и рабочий процесс выполняются на ферме (4 машины). Все ссылки из веб-приложения на рабочий процесс используют "http://localhost/..". Сохранение рабочего процесса хранится в одной базе данных с использованием SQL Server 2005. Работает на Windows Server 2008.

Сценарий: Сервер A создает новый рабочий процесс, и обработка завершается, когда он достигает операции выбора, которая содержит действия получения в качестве своих ветвей. Непосредственно перед операцией Pick в базе данных устанавливается специфичный для приложения флаг, указывающий, что рабочий процесс готов прослушивать следующий запрос. В базе данных персистентности рабочего процесса создается закладка. СерверB использует корреляцию для возобновления существующего рабочего процесса, и обработка продолжается до тех пор, пока не будет достигнута следующая операция выбора. И так далее.

Сценарий, описанный выше, работает в большинстве случаев нормально, за исключением случаев, когда ServerB пытается возобновить рабочий процесс вскоре после того, как установлен «флаг для приложения». Этот флаг является настраиваемым действием, которое позволяет мне уведомить пользователя, что он может продолжить следующую операцию. ОДНАКО, в большинстве случаев это не удастся с InstanceLockedException. Сервер показывает, что было несколько попыток, а затем пытается перенаправить на еще один сервер, прежде чем выдает другое исключение с именем RedirectionException.

В настоящее время моя конфигурация WCF настроена на следующее:

<sqlWorkflowInstanceStore connectionString="[conn str]"
instanceEncodingOption="None"
instanceCompletionAction="DeleteNothing"
instanceLockedExceptionAction="BasicRetry"
hostLockRenewalPeriod="00:00:30"
runnableInstancesDetectionPeriod="00:00:05" />

Я не уверен, должен ли я использовать AgressiveRetry или изменить периоды обновления и обнаружения ... Или мне нужно сделать что-то совершенно другое. Мы высоко ценим ваш вклад.

1 Ответ

1 голос
/ 18 марта 2012

Убедитесь, что для timeToUnload и timeToPersist установлено значение 00:00:00. Это рекомендуемая настройка для хостов с балансировкой нагрузки.

http://msdn.microsoft.com/en-us/library/ff383824.aspx

...