我有一个带有请求-响应端口类型的 BizTalk 2009 编排,该端口类型发布为 WCF Basic-HTTP Web 服务。该端口有一个操作,并且该操作具有具有适当模式的请求和响应消息。在此端口上收到请求后,在少数情况下应该向客户端返回故障消息而不是标准响应消息。我很难将正确的故障消息返回给客户端。我希望能够同时设置 SOAP 错误消息的faultcode
和faultstring
元素。这是我尝试过的:
添加字符串类型的故障消息:我尝试将消息类型为字符串的故障消息添加到操作中。在编排中,我构造了一个字符串消息并将其作为响应发送。交付回客户端的故障如下所示:
<?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 上的文档How to Throw Fault Exceptions from Orchestrations Published as WCF Services没有告诉您“如何”抛出错误异常,除了它们可以抛出并且您需要includeExceptionDetailInFaults
在配置中进行设置(我已经完毕)。
有人对如何在 BizTalk 2009 中实现这一点有任何建议吗?