Поведение SendResponse в WF4
В верхней части рабочего процесса моего шаблона я поместил блок ReceiveRequest / SendReply, в котором я хотел бы выполнять синхронные операции, что позволило бы клиенту пользователя своевременно получать ответ о запуске рабочего процесса. Клиент вызывает WF через WCF.
Клиент знает о статусе текущего запроса со статусом записи в базе данных моего приложения.
Например, я создаю заказ, вызываю PlaceOrderWF, устанавливаю статус заказа в БД "Принят". Затем клиент может выполнить все, что ему захочется, пока WF выполняет проверки, элементы управления и т. Д., Устанавливая конечное значение ордера на "Завершено" или "Ошибка".
Я ожидаю, что клиент получит ответ сразу после блока SendResponse. На самом деле, похоже, это не работает, но ждет какого-то "события", чтобы освободить клиента. К сожалению, у меня нет доказательств событий, вызывающих такое поведение.
Чтобы проверить это, просто поместите действие Delay после действия SendResponde, и вы сможете воспроизвести поведение, о котором я говорю.
Любые советы о том, как избежать этой нежелательной ошибки?
1 ответ
Рабочий процесс будет продолжаться и выполняться столько, сколько он может в текущем потоке, и в результате не сразу возвращается к вызывающей стороне. Если вы добавите задержку с небольшим тайм-аутом, скажем, 1 секунду, в рабочий процесс это вызовет рабочий процесс для простоя и ответ WCF для отправки клиенту, после чего рабочий процесс будет продолжен.