Службы рабочего процесса и операции, не поддерживаемые состояниями
У меня есть две службы рабочего процесса (конечные автоматы), которые должны взаимодействовать и обмениваться информацией для достижения желаемого поведения.
У меня есть проблема (но у меня это было только с одним конечным автоматом), что иногда я пытаюсь отправить операцию, которая не разрешена текущим состоянием.
Есть две проблемы: 1) Я должен ждать тайм-аут операции, чтобы знать, что операция не была разрешена 2) Я "маскирую" реальные тайм-ауты из-за других проблем
К настоящему времени я нашел два возможных решения: 1) я могу изменить подписи, чтобы они возвращали истину (разрешено) и ложь (не разрешено), и добавлять все операции ко всем состояниям (недопустимые операции будут вызывать самопереход) 2) я всегда добавить все переходы во все состояния (недопустимо, приведет к самопереходу), но для недопустимых переходов я отправлю исключение
Я хотел бы знать, какой вариант является лучшим (и, конечно, я был бы признателен и за другие возможные решения). Я также хотел бы знать, как я мог ответить на запрос с исключением (возможно, бросая это в попытке / поймать?).
Спасибо
1 ответ
Другой вариант - использовать информацию в хранилище постоянства рабочего процесса. Один из столбцов содержит активные закладки, а в случае действия Receive это операция SOAP. У вас может быть отдельный сервис, который предоставляет эту информацию для данного экземпляра рабочего процесса.
Вам все еще нужно учитывать тот факт, что вы можете отправлять сообщения в рабочий процесс, который находится в другом состоянии, потому что хранилище постоянства рабочего процесса не обновляется сразу (если вы не сделаете это), и потому что несколько человек могут отправлять сообщения в тот же экземпляр рабочего процесса. Тем не менее, этот базовый метод работает очень хорошо, и я использовал его для включения / выключения кнопок в пользовательском интерфейсе в зависимости от состояния рабочего процесса.