Поведение SendResponse в WF4
-
11-10-2019 - |
Вопрос
В верхней части моего шаблона рабочего процесса я поместил блок PretiveRequest / SendReply, где я хотел бы выполнить синхронные операции, что позволило клиенту пользователя получить своевременный ответ на начало рабочего процесса. Клиент вызывает WF через WCF.
Клиент знает о состоянии текущего запроса со статусом записи в моей базе данных приложений.
Например, я создаю заказ, вызываю PlaceOrderWF, устанавливаю статус заказа на DB на «принятый». Затем клиент может выполнять все, что он хочет, пока WF выполняет проверки, элементы управления и т. Д., Установка окончательного значения заказа для «завершения» или «ошибки».
Я ожидаю, что клиент получит ответ сразу после блока SendResponse. На самом деле, похоже, это не работает, но он ждет какого -то «события», чтобы выпустить клиента. К сожалению, у меня нет доказательств событий, вызывающих это поведение.
Чтобы проверить это, просто поместите активность задержки после деятельности SendResponse, и вы сможете воспроизводить поведение, о котором я говорю.
Есть намеки на то, как избежать этой нежелательной ошибки?
Решение
Рабочий процесс будет продолжаться и выполнять как можно больше, чем можно в текущем потоке, и, как следствие, не вернется к вызывающему абоненту. Если вы добавите задержку с небольшим тайм -аутом, скажем, 1 секунду, в рабочий процесс это вызовет Рабочий процесс, чтобы пойти на холост и ответ WCF отправить клиенту, после чего рабочий процесс будет продолжаться.