Как элегантно обработать исключение Instance Not Found в WWF 4 Content Based Correlation - PullRequest
0 голосов
/ 31 октября 2011

Способ, которым WWF генерирует исключение ошибки SOAP, когда в WWF 4 используется корреляция на основе содержимого, оказывается проблематичным для клиентов SOAP, которые не используют .NET. У меня есть сторонние клиенты, которые подключаются к моим службам на основе WWF 4, и они плохо справляются с обработкой исключений, возникающих, когда используемый ими идентификатор корреляции на основе содержимого не может коррелировать с экземпляром рабочего процесса или когда вызов выполняется в неподходящее время в рабочем процессе экземпляра.

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

Я ненавижу добавлять этот дополнительный уровень обслуживания, и мне было интересно, есть ли у кого-нибудь какие-либо предложения или лучший подход? Есть ли способ отловить ошибку корреляции в службе WWF и вернуть правильно сформированный ответ клиенту? Или же возникает ошибка корреляции на уровне протокола WWF, и нет способа отловить это в рабочем процессе?

1 Ответ

3 голосов
/ 31 октября 2011

Это исключение - результат того, что инфраструктура взаимодействия WCF / WF4 не может определить правильный экземпляр рабочего процесса, на который следует отправить сообщение. Упомянутый GUID обычно представляет собой просто новый GUID, который немного вводит в заблуждение, поскольку предполагает наличие экземпляра рабочего процесса с таким идентификатором.

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

...