Что могло бы вызвать исключение RedirectionException в службе Windows Workflow?

#.net #wcf #workflow-foundation-4 #workflowservice

#.net #wcf #рабочий процесс-foundation-4 #workflowservice

Вопрос:

Что именно может быть основной причиной того, что узел службы рабочего процесса выдает исключение RedirectionException следующего типа:

Система.ServiceModel.Каналы.Исключение перенаправления: запрошенный ресурс перемещен в одно из следующих расположений:
 http://blah.mydomain.com/MyWorkflowService.svc 
 в System.Runtime.AsyncResult.Завершить [TAsyncResult] (результат IAsyncResult)
 в системе.ServiceModel.Действия.Диспетчер.ControlOperationInvoker.InvokeEnd(экземпляр объекта, Object[]amp; outputs, результат IAsyncResult)
 в системе.ServiceModel.Диспетчер.DispatchOperationRuntime.InvokeEnd(MessageRpc amp; rpc)
 в системе.ServiceModel.Диспетчер.Неизменяемое время выполнения.ProcessMessage7 (MessageRpc amp; rpc)
 в системе.ServiceModel.Диспетчер.MessageRpc.Process(логический набор isOperationContextSet)

Документация для RedirectionException является общей с точки зрения WCF, и я понимаю, для чего она предназначена, но я не уверен, какое условие запускает сам узел службы рабочего процесса для ее запуска, и, похоже, по ней нет никакой документации.

Ответ №1:

Я не думаю, что я когда-либо видел, чтобы это происходило, но, согласно Reflector, это результат исключения InstanceLockedException, которое возникает, когда экземпляр WF не может быть заблокирован. Это может быть либо потому, что другой WorkflowServiceHost заблокировал и загрузил его, либо из-за некоторой несогласованности в базе данных хранилища экземпляров.

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

1. Спасибо, я был ленив и не испытывал желания разбирать / искать его. Странное исключение, возникающее перед лицом этих проблем. В моем конкретном случае я работаю на ферме серверов, и это, вероятно, происходит из-за длительной операции, выполняемой на сервере, при вторичном вызове той же службы WF, которая поступает на ServerB. Таким образом, в этом случае ServerB, должно быть, истекло время ожидания при получении блокировки и вызове исключения RedirectionException, пытающегося сообщить клиенту перейти на сервер.

2. Да, это звучит разумно. Единственная проблема заключается в том, что клиент обычно не может этого сделать 🙁

3. Привет @DrewMarsh, я также сталкиваюсь с той же проблемой в ферме серверов, т. е. моя служба рабочего процесса размещена на 2 серверах, и один из серверов получает такое же исключение RedirectionException. Итак, если это может быть причиной, как вы объяснили, как проверить то же самое в хранилище экземпляров (я использую SQL Server и хранилище сохраняемых экземпляров), имеет ли какой-либо сервер блокировку для этого. И если это происходит, то каково предлагаемое исправление? Спасибо.