BizTalk 捕获 Http 响应代码

Posted

技术标签:

【中文标题】BizTalk 捕获 Http 响应代码【英文标题】:BizTalk Catch Http Response Code 【发布时间】:2015-10-15 06:46:20 【问题描述】:

我有一个编排,它接收来自本地休息服务的请求,然后将请求发送到另一个远程休息服务,然后如果远程服务使用 200 HTTP 代码成功返回响应,BizTalk 可以处理响应消息,但如果 HTTP 响应代码不同则 200 BizTalk 无法处理故障响应消息。

BizTalk 日志在事件查看器上显示以下错误。

Details:"System.Net.WebException: The remote server returned an unexpected response: (400) Bad Request.
"errorMessage":"message":"En az 1 adres alani    gereklidir.","moreInfoURL":"http://paritus.com/kb/api-errors","status":400".

在这个问题之后,我在发送端口上添加了一个错误操作,但 BizTalk 仍然无法捕获失败消息。你有什么想法吗?

【问题讨论】:

捕获异常部分有什么?你捕捉到 System.Exception 吗?或者你是否抓住了 Fault_1 。Fault_1 中定义了什么? 实际上我尝试捕获来自发送端口的 fault_1 消息,但我无法捕获 http 错误响应。如果对捕获故障消息有其他想法,我可以尝试您的解决方案 这是在尝试使用 WCF-WebHttp 适配器吗?是的,错误消息不会进入端口上的故障,因为它没有在它创建的 SOAP 异常上设置消息类型。我认为这是一个错误,我已经在我的博客中写过它。您必须将其作为 System.Exception 捕获 即使使用 System.Exception,我可以在其中捕获上述错误,但我仍然得到与发送端口相关的暂停可恢复实例。它只是我的吗? 【参考方案1】:

实际上,如果没有一些额外的代码行,您无法捕获此类异常 :) 因为当您在编排级别捕获此异常时,WCF 适配器已经封装了它并且您无法访问错误代码,请检查本文用于处理此类错误http://social.technet.microsoft.com/wiki/contents/articles/16625.biztalk-server-rest-services-error-handling.aspx

【讨论】:

【参考方案2】:

是的,WCF-WebHttp 适配器存在一个问题,即如果出现故障,它不会设置消息类型上下文属性,因此它不会转到端口上定义的故障类型。 捕获它的唯一方法是在 System.Exception 块中。

查看我的博文BizTalk 2013 R2 known bugs, issues & quirks,BUG:BIZTALK WCF-WEBHTTP ADAPTER DOES NOT SET MESSAGE TYPE ON ERROR

更新:在 BizTalk 2013 R2 的 CU 5 之后,以下内容不再适用,现在会引发错误。

另外请注意,如果终端系统抛出 500 状态码,它根本不会作为错误抛出,您必须自己检查状态码。

见BizTalk WCF-WebHttp adapter does not detect 500 error

【讨论】:

能否请您在这里查看我的新相关问题:***.com/questions/49563450/…

以上是关于BizTalk 捕获 Http 响应代码的主要内容,如果未能解决你的问题,请参考以下文章

BizTalk Server 2013 休息错误处理

为啥 BizTalk Scope 没有捕获此 MissingPropertyException

使用 X509 证书签署 BizTalk WCF 响应

我们应该引入 BizTalk/ESB 吗?

BizTalk - 传递通知上的路由失败

BizTalk Direct-Bound 发送端口慢触发