У меня есть оркестровка BizTalk 2009 с типом порта запрос-ответ, который публикуется как веб-служба WCF Basic-HTTP. У порта есть одна операция, и у этой операции есть сообщения запроса и ответа с соответствующими схемами. После получения запроса через этот порт в некоторых случаях клиенту следует вернуть сообщение об ошибке вместо стандартного ответного сообщения. Мне трудно вернуть клиенту правильное сообщение о неисправности. Я хотел бы иметь возможность устанавливать элементы faultcode
и faultstring
сообщения об ошибке SOAP. Вот что я пробовал:
Добавление сообщения об ошибке типа String: я попытался добавить к операции сообщение об ошибке со строкой типа сообщения. В рамках оркестровки я создал строковое сообщение и отправил его в качестве ответа. Неисправность, возвращенная клиенту, выглядела так:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
<faultstring xml:lang="en-US"><?xml version="1.0" encoding="utf-8"?>
<string>This is the error message.</string></faultstring>
<detail>
<ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HelpLink i:nil="true"/>
<InnerException i:nil="true"/>
<Message><?xml version="1.0" encoding="utf-8"?>
<string>This is the error message.</string></Message>
<StackTrace>at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkAsyncResult.End() ...</StackTrace>
<Type>Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkNackException</Type>
</ExceptionDetail>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Это почти работает, за исключением того, что элемент faultstring
содержит сериализованную версию моей строки xml вместо самой строки. Я также не могу установить элемент faultcode
.
Добавление сообщения об ошибке типа http://schemas.xmlsoap.org/soap/envelope/#Fault
. Я подумал, что смогу убедить BizTalk вернуть сообщение об ошибке в соответствии со строками, которые я ожидал бы, если бы создал элемент Fault
и отправил его. Поэтому я добавил сообщение об ошибке типа http://schemas.xmlsoap.org/soap/envelope/#Fault
, создал соответствующее сообщение и отправил его в качестве ответа. Результат был таким же, как и выше, за исключением того, что вместо строки элемент faultstring
содержал раздел CDATA
со всем xml-сообщением, которое я создал внутри.
Так что я сейчас застрял; Я чувствую, что это должно быть простой задачей в BizTalk. Опубликована документация по MSDN, Как выбросить исключения сбоя из оркестровок как WCF Services, ничего не говорит вам о том, «как» генерировать исключения сбоя, за исключением того, что они могут быть выброшены и что вам нужно установить includeExceptionDetailInFaults
в конфигурации (что я уже сделал).
Есть ли у кого-нибудь предложения о том, как это можно сделать в BizTalk 2009?