Обработка FaultException в BizTalk - PullRequest
0 голосов
/ 06 августа 2009

FaultContract из моей службы WCF не имеет членов datacontract; таким образом, когда служба используется в BizTalk, сгенерированная схема не показывает никаких членов. Как мне справиться в BizTalk?

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

Ответы [ 3 ]

0 голосов
/ 20 августа 2009

Если вы используете сервис из оркестровки, вы можете попробовать выполнить следующие действия:

  1. Добавьте XSD-представление вашего FaultContract для проекта и использования это как тип сообщения по вашей вине работа.

  2. Добавить блок обработчика исключений в оркестровка с использованием этой ошибки операция в качестве типа сообщения

  3. На вашем двустороннем WCF SendPort перейдите на вкладка Сообщения, а затем на «Тело входящего сообщения BizTalk» установите переключатель в положение Path.

  4. В поле «Выражение пути тела» добавить как то так:

    / * [namespace-uri () = 'http://myservice.namespace/'] | / * [local-name () = 'Fault'] / * [local-name () = 'Detail'] / *

Эти два xpaths разделены знаком '|' заставит адаптер в зависимости от того, что он получает, публиковать либо правильный ответ службы, либо содержимое узла сведений, в котором размещен WCF FaultContract. Это позволит дизассемблеру работать при попытке идентифицировать сообщение.

Побочным эффектом этого является то, что у вас будет проблема с перехватом SOAP-ошибок в оркестровке, но это решается созданием представления схемы SOAP-ошибки (http://schemas.datacontract.org/2004/07/System.ServiceModel#ExceptionDetail) и использованием этого в качестве второго сбоя). работа.

0 голосов
/ 10 ноября 2011

Я нашел проблему. Наш веб-сервис возвращает ошибку XML в нижнем регистре. Итак, правильный XPath -

/*[local-name()='Fault']/*[local-name()='detail']/*
0 голосов
/ 06 августа 2009

Я не уверен, возможно ли это. Но чтобы заставить его работать, biztalk должен иметь доступ к dll с вашими объектами данных. Вы можете попробовать ссылаться на DLL из вашего проекта biztalk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...