我有一个BizTalk 2009业务流程,其中包含作为WCF基本HTTP Web服务发布的请求 - 响应端口类型。端口有一个操作,并且该操作具有适当模式的请求和响应消息。在此端口上收到请求后,有几种情况应将错误消息返回给客户端而不是标准响应消息。我很难将正确的错误信息返回给客户端。我希望能够设置SOAP故障消息的faultcode
和faultstring
元素。以下是我尝试过的:BizTalk业务流程:使用非类型化SOAP错误进行响应
添加类型为字符串的故障消息: 我试图向操作添加带有消息类型字符串的故障消息。在编排中,我构造了一个字符串消息并将其作为响应发送。以后被输送回客户机故障看起来像:
<?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
类型的故障信息我想如果我构建了Fault
元并送我也许能说服的BizTalk返回沿着我所期待什么线路故障消息。因此,我添加了一条类型为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中实现?
没有什么是简单的BizTalk :) – Nix 2010-10-14 20:00:12
@Nix:同意!我没有说它*很简单,只是它*应该*而已。 – 2010-10-14 20:10:00