#c# #.net #wcf #workflow-foundation-4
#c# #.net #wcf #workflow-foundation-4
Вопрос:
У нас есть последовательная служба рабочего процесса WCF (двунаправленная, XAML, размещенная в IIS), которая выполняет несколько вызовов других служб WCF (которые не обязательно являются рабочими процессами), которые выполняют транзакционные операции в TransactedReceiveScope. Мы столкнулись с проблемой, которая, по нашему мнению, каким-то образом связана с тем фактом, что вы не можете легко установить значение флага AbortInstanceOnTransactionFailure, как вы делаете с активностью TransactionScope.
Всякий раз, когда возникает исключение на одном из нижних уровней нашей архитектуры (архитектура SOA; мы создали пользовательскую реализацию интерфейса IErrorHandler, чтобы передавать исключения по мере их возникновения в службах WCF, и сумели перехватить их в клиентских приложениях, используя обычные блоки try / catch в стиле C #, а нечем использовать контракты ошибок) и правильно перехватывается в рамках любого из пользовательских (производных от CodeActivity activity) транзакционных действий, которые включают всю область транзакции, внешняя транзакция прерывается, что приводит к прерыванию экземпляра рабочего процесса.
То, что мы хотим сделать, это перенести исключение на уровень клиента (уровень API) и позволить нашему маршалу выполнить обработку, как с нижними уровнями (десериализовать сведения об ошибке и преобразовать их в объект исключения), вместо того, чтобы получать общее сообщение «Рабочий процесс прерван». сообщение об ошибке без какой-либо дополнительной информации о нем.
Кто-нибудь сталкивался с подобной проблемой или имеет какие-либо идеи о том, что можно сделать, чтобы предотвратить прерывание рабочего процесса при прерывании транзакции?
Мы повсюду искали ответы, и этот поток — единственный, который приближается к нашей проблеме:
Подробности о реализации маршалинга исключений:
Стоит отметить, что то же самое поведение применяется для служб WCF workflow с использованием декларативного подхода (через файлы * .config), так что до реализации транзакционной активности в наших рабочих процессах это работало так, как ожидалось.
Заранее спасибо.
Комментарии:
1. Как бы то ни было, я придерживаюсь философии захвата исключений на границе службы, а не передачи их клиенту. Но я могу понять, как у вас сложная служба в WF, у которой есть свои проблемы, которые могут не относиться к стандартным шаблонам проектирования WCF.