【问题标题】:Handle SOAP Exception in BizTalk Orchestration在 BizTalk 业务流程中处理 SOAP 异常
【发布时间】:2021-04-16 21:34:36
【问题描述】:

我通过双向端口接收到一个soap FAULT消息,如下所示,

<S:Fault xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
    <faultcode>S:Status</faultcode>
    <faultstring>Exception occured: TransactionRolledback</faultstring>
</S:Fault>

我收到的错误:使用此函数只能将“System.Exception”的对象类型添加到 ESB 故障消息中

我正在使用 BTS.soap_envelope_1__1.Fault 在编排中使用单独的异常块,但它仍然失败,

我想捕捉这是 ESB 异常并发送到 ESB 门户。

【问题讨论】:

  • 您在异常块中捕获了什么类型的异常?以什么方式失败,没有捕获它,或者抛出一个不同的错误?
  • 使用此函数只能将“System.Exception”的对象类型添加到 ESB 故障消息中。这是我在 esb 中遇到的错误!我认为存在模式不匹配! @dijkgraaf
  • Edit 您的问题包含该错误,以及异常块中表达式形状中的代码。此外,您还没有回答您的异常块捕获的异常类型。

标签: c# biztalk biztalk-2013r2


【解决方案1】:

按照此thread 答案中提供的步骤来捕获肥皂故障。还建议在此处添加步骤

要将 SOAP 故障纳入您的业务流程:

  1. 在 BizTalk 的发送端口上: a) WCF 适配器属性,消息选项卡:传播故障消息 = true b) WCF 适配器属性,消息选项卡:入站消息正文:使用“soap:Body”或使用提取消息的路径或 /*[local-name()='Fault'] 获取 SOAP 错误 c)“为失败的消息启用路由” - 这对 SOAP 故障没有影响。因此,您可能希望将其设置为 true 以处理真正的传输错误(非 SOAP 错误)。

  2. 在您的编排中的发送端口上

  • 选择操作,然后选择“新故障消息”
  • 将消息名称设置为 SoapFault(或其他)
  • 将消息类型设置为引用的模式:BTS.soap_envelope_1__2.Fault。 (如果这是 SOAP 1.1 操作,您将使用 BTS.soap_envelope_1__1.Fault)。
  1. 在您的发送操作周围的范围内
  • 添加新的异常处理程序
  • 为您在步骤 2 中创建的 port-name.operation-name.SoapFault 选择“异常对象类型”
  • 指定对象名称,例如故障
  • Fault 现在是 SOAP Fault 的 XML,您可以使用 XPath 来获取 Fault Reason 和 Message 元素。

现在,如果发生 SOAP 错误,BizTalk 跟踪的消息事件视图中不会显示“异常” - 它只是表明您的业务流程收到了 SOAP 错误消息。但是在您的编排中,消息被视为异常,并且您的“SoapFault”异常处理程序被调用。你得到一个“FaultReceiveException”。

注意事项 1) 如果发生 SOAP 故障,BizTalk 发送端口传输重试选项不会生效,因为这不再被视为传输失败。这是不幸的,因为 SOAP 错误可能是由于目标服务的临时问题而发生的,并且在重试时请求可能会起作用。

2) 由于 BizTalk 不会将 SOAP 错误视为错误,因此如果您想使用失败消息的路由,您的业务流程需要记录该消息

3) 对于 XlangSoapException(即 System.Web.Services.Protocols.SoapException)和/或一般异常,您仍然需要一个异常处理程序,因为传输错误(目标服务器关闭等)仍然会发生这些情况

  1. 由于 (3),您可能仍希望指定“为失败的消息启用路由”以防止出现暂停消息。

  2. 在我的示例中,我刚刚收到了消息的 soap:Fault 部分,但如果需要,您可以拿起整个 soap:Envelope。

【讨论】:

  • 只有链接的答案被认为是低质量的,往往会被删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多