Службы рабочего процесса и операции, не поддерживаемые состояниями

У меня есть две службы рабочего процесса (конечные автоматы), которые должны взаимодействовать и обмениваться информацией для достижения желаемого поведения.

У меня есть проблема (но у меня это было только с одним конечным автоматом), что иногда я пытаюсь отправить операцию, которая не разрешена текущим состоянием.

Есть две проблемы: 1) Я должен ждать тайм-аут операции, чтобы знать, что операция не была разрешена 2) Я "маскирую" реальные тайм-ауты из-за других проблем

К настоящему времени я нашел два возможных решения: 1) я могу изменить подписи, чтобы они возвращали истину (разрешено) и ложь (не разрешено), и добавлять все операции ко всем состояниям (недопустимые операции будут вызывать самопереход) 2) я всегда добавить все переходы во все состояния (недопустимо, приведет к самопереходу), но для недопустимых переходов я отправлю исключение

Я хотел бы знать, какой вариант является лучшим (и, конечно, я был бы признателен и за другие возможные решения). Я также хотел бы знать, как я мог ответить на запрос с исключением (возможно, бросая это в попытке / поймать?).

Спасибо

1 ответ

Решение

Другой вариант - использовать информацию в хранилище постоянства рабочего процесса. Один из столбцов содержит активные закладки, а в случае действия Receive это операция SOAP. У вас может быть отдельный сервис, который предоставляет эту информацию для данного экземпляра рабочего процесса.

Вам все еще нужно учитывать тот факт, что вы можете отправлять сообщения в рабочий процесс, который находится в другом состоянии, потому что хранилище постоянства рабочего процесса не обновляется сразу (если вы не сделаете это), и потому что несколько человек могут отправлять сообщения в тот же экземпляр рабочего процесса. Тем не менее, этот базовый метод работает очень хорошо, и я использовал его для включения / выключения кнопок в пользовательском интерфейсе в зависимости от состояния рабочего процесса.

Другие вопросы по тегам