Как мне обрабатывать звонки "Получать", сделанные из строя?

У меня есть сервис WF4, который имитирует воронку продаж. Это работает, начиная с "Регистрация" приема вызова. После этого, есть 10 аналогичных этапов (по 2 на каждом этапе). Вы не можете продвинуться дальше этапа, пока текущий этап не подтвердит полученные данные. В чем я не уверен, так это в том, что хотя мое клиентское приложение не допускает этого, как я могу сделать так, чтобы мой рабочий процесс не позволял кому-либо вызывать операции приема из строя? В моем тестовом консольном приложении я позволил пользователю вызывать любую операцию получения (только потому, что я хотел посмотреть, что происходит).

Например, если я сначала вызываю Register, а затем получаю "AddQualification" до получения "AddProspect", тестовое приложение возвращается с исключением, подобным этому:

Операция "AddQualification|{http://tempuri.org/}IZSalesFunnelService" в экземпляре службы с идентификатором "1984c927-402b-4fbb-acd4-edfe4f0d8fa4" не может быть выполнена в настоящее время. Убедитесь, что операции выполняются в правильном порядке и что используемая привязка обеспечивает заказанные гарантии доставки

Из этого вытекают 2 вещи, которые я не знаю, как сделать:

Во-первых, как мне обработать исключение ошибки, чтобы уведомить клиента значимым образом и...

Во-вторых, поскольку я использую постоянство (и продвижение свойств), когда я выполняю вызов по порядку, свойства, которые продвигаются, выгружаются. Они не повышаются снова после того, как клиент получает исключение.

Какие-нибудь мысли?

2 ответа

Решение

Что касается вашего первого вопроса, я бы посмотрел пост Рори Примроуза о том, как скрыть ошибки корреляции контента: управление ошибками корреляции контента. Здесь он переводит исключение в действительное исключение для бизнеса.

Извините, мой сервер немного загружается, поэтому блог временно отключается.

Что касается вашего второго вопроса, вам нужно убедиться, что для службы рабочих процессов установлено значение "Отменить" для необработанных исключений. Вот документация для AppFabric для этого параметра:


Abandon. Хост службы прерывает экземпляр службы рабочего процесса в памяти. Состояние экземпляра в базе данных остается "Активным". Служба управления рабочими процессами восстанавливает брошенный экземпляр рабочего процесса с последней точки сохранения, сохраненной в базе данных хранения.

Оставь и приостанови. Хост службы прерывает экземпляр службы рабочего процесса в памяти и устанавливает состояние экземпляра в базе данных постоянства на "Приостановлено". Приостановленный экземпляр может быть возобновлен или завершен позже с помощью диспетчера IIS. Эти экземпляры не восстанавливаются службой управления рабочими процессами автоматически.

Прервать. Хост службы прерывает экземпляр службы рабочего процесса в памяти и устанавливает состояние экземпляра в базе данных постоянства на "Завершено (прекращено)". Прерванный экземпляр не может быть возобновлен позже.

Отменить. Хост службы отменяет экземпляр службы рабочего процесса, вызывая вызов всех обработчиков отмены, так что рабочий процесс корректно завершается, и устанавливает состояние экземпляра в базе данных постоянства на "Завершено (отменено)".


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

Надеюсь это поможет.

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