微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 BizTalk Orchestration 中处理 SOAP 异常

如何解决在 BizTalk Orchestration 中处理 SOAP 异常

我通过双向端口接收到一个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 门户。

解决方法

按照此 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 选择“Exception Object Type”
  • 指定对象名称,例如故障
  • 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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?