如何在BizTalk Orchestration中从Rest服务中捕获http 400状态

时间:2018-03-29 19:10:30

标签: rest wcf biztalk

在BizTalk 2013 / R2(CU6)上,我在我当前的客户端看到了另一个app / orchestration,似乎正在这样做,但我的app / orchestration却没有。

我通过导出,编辑,然后导入,仅更改名称和操作/方法绑定来克隆其发送端口。它具有“检查失败消息的启用路由”。

看起来我正在使用System.Exception在业务流程中捕获它, 但我仍然看到SendPort暂停(可恢复)和路由错误(不可恢复)。

我正在捕获的示例错误(我故意强制错误来测试错误处理)。

  

System.Net.WebException:远程服务器返回了意外情况   回复:(400)不良请求。 { “httpStatusCode”:400, “httpMessage”:“坏   请求“,”errorMessage“:”无法处理货件   请求“,”错误“:[{”severity“:”ERROR“,”message“:”没有凭据   找到这个供应商。你有没有把它们添加到ABC   仪表盘“, “源”: “SYSTEM”}], “supportReferenceId”: “31eee61a-8770-4524-八达-2d906a53ab48”}

我见过其他一些博客和问题表明没有返回500个错误,并且未设置http状态。但我还没有看到有关Suspended SendPorts的任何信息。也好像今天早些时候,我的System.Exception没有抓住它,但我无法及时回过头来确定。

我已将SendPort的重试次数计为0.

此外,实际上确定哪些http状态可以返回到业务流程?我的同事的代码也检查了400,401和403。

相关问题:BizTalk Catch Http Response Code

更新:我的同事在另一个团队,但我从她那里听到了回复。她有另一个业务流程只是“吃掉”错误消息以避免错误。

2 个答案:

答案 0 :(得分:1)

对于Http错误与任何其他硬错误相比,不应该有任何特殊之处。他们只是同样地回到了Orchestration。

这是一篇关于使用一些有用的技术处理Orchestrations中的错误的文章。

BizTalk Server: Suspend and Resume an Orchestration on Two Way Port Error

答案 1 :(得分:1)

是的,即使您在业务流程中以System.Exception的身份捕获消息,消息仍将在发送端口中挂起。您可以通过以下操作解决此问题。

  1. 打开发送端口上失败消息的路由
  2. 拥有另一个带有自定义NULL adapter的发送端口,或者根据您的注释和Johns链接的博客,编排一个Orchestration,该订阅服务器订阅来自该发送端口的所有错误消息,例如ErrorReport.SendPortName == SendPortName
  3. 如果您有另一个发送端口(例如ESB ALL.Exception端口)用于预订失败,那么您需要更新规则以排除该端口ErrorReport.SendPortName != SendPortName

Null Adapter会执行其名称所暗示的功能,只是将消息丢弃。您可以在GitHub上找到NULL适配器。如果无法安装该文件,只需将其写入FILE位置,然后执行清理作业将其删除。