BizTalk Server 2013 休息错误处理
Posted
技术标签:
【中文标题】BizTalk Server 2013 休息错误处理【英文标题】:BizTalk Server 2013 Rest Error Handling 【发布时间】:2016-08-27 11:39:30 【问题描述】:我正在使用 BizTalk Server 2013 WCF-WebHttp 适配器来调用 REST API SalesForce。 当我收到不同于 200 的 HTTP 状态代码时,我的编排捕获了 SystemException,但我仍然有一个发送端口实例暂停。 是否有任何“本机”解决方案来避免发送端口实例暂停? 我读了这篇文章: BizTalk Server: REST Services Error Handling
但是对于 WCF-WebHttp 适配器,CustomBinding 选项不可用。 我试图添加错误消息,但我还没有找到合适的类型来捕获这个异常。
你有什么想法吗?
【问题讨论】:
【参考方案1】:很遗憾,没有
那篇文章有更新版本BizTalk Server 2013 R2: Handle exceptions from REST services in Orchestration
您必须将发送端口设置为 WCF-Custom 并使用自定义绑定,然后从 WCF-WebHttp 重新创建所有设置。
更多详情请关注。
更新: 将编排中的异常作为系统异常捕获是好的,然后您可以检查错误以查看它是否是业务异常,例如如果您在执行创建或更新并获得 404 之前查询对象是否存在于 RESTful 服务中。
但是,您必须做更多的事情来阻止端口上的 Suspended 消息。
1) 停止端口上的 Suspended 消息 Enable Routing for Failed messages on the Send Port。
2) 然而,这意味着它将转到您拥有的任何框架来处理失败的消息,从而导致为业务异常引发大量错误
为防止这种情况,您要么需要调整异常处理程序上的过滤器表达式,要么在异常处理框架中设置规则以忽略这些消息。
例如,我们使用 ESB 异常处理框架并调整规则以排除特定的发送端口。
ESB 异常处理框架 All.Exceptions 端口
3) 但是,您仍然需要有其他东西订阅失败的消息以使它们消失,我们使用自定义的空适配器和过滤器来订阅错误。这意味着错误只会出现在 Orchestration 中。
NULL 适配器过滤表达式
【讨论】:
您好,感谢您的回答。很遗憾,我想为它保留 WCF-WebHttp 适配器的变量映射选项。我想了解更多细节。最好的问候。 @LarysaSUDAS 是的,我们现在正在研究完全相同的问题。看起来我链接的 2013 R2 文章也没有使用自定义绑定,但它试图清理管道中的故障。我怀疑您最终仍然会收到一条挂起的消息或路由到您处理失败消息的任何地方的失败。 我在 BT 2013 中对 WCF-WebHttp 适配器进行了实验,发现 HTTP 状态码 200、201、202、203 以及 500 没有“无法捕获”的异常,以防错误消息与状态码 500 被添加到操作中。不需要自定义管道。默认 XMLReceive 管道的工作方式相同。此外,如果将故障消息添加到操作中,则即使状态码为 2xx,也会在响应正文中返回故障消息的情况下引发可捕获的故障异常。 @OlegDeribas 问题是我们正在与返回非 xml 响应的 Web 服务通信,例如JSON。在这种情况下是的,您可以在编排中捕获 SOAP 错误,但它也会导致错误从端口抛出到 ESB 异常框架。 1)如果是业务异常,我们不希望这些异常进入框架,例如RESTful 服务中的 404。 2) 我们希望 JSON 有效负载通过 JSON 解码器,而不是在 JSON 响应与错误中的其他文本嵌入的情况下返回 SOAP 错误。 @LarysaSUDAS 我已经发布了解决这个问题的方法。以上是关于BizTalk Server 2013 休息错误处理的主要内容,如果未能解决你的问题,请参考以下文章