我有一个业务流程,它接收来自本地休息服务的请求,然后将请求发送到另一个远程Rest服务,然后如果远程服务成功返回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仍然无法捕获失败消息。你有什么想法吗?
答案 0 :(得分:1)
实际上,如果没有一些额外的代码行,你就无法捕获这种异常:)因为当您在业务流程级别捕获此异常时,WCF适配器已经封装了它,您无法访问错误代码,请查看此文章以处理这类错误http://social.technet.microsoft.com/wiki/contents/articles/16625.biztalk-server-rest-services-error-handling.aspx
答案 1 :(得分:1)
是的,WCF-WebHttp适配器存在一个问题,即如果出现故障,它不会设置Message Type上下文属性,因此它不会进入端口上定义的Fault类型。
捕获它的唯一方法是在System.Exception块中。
请参阅我的博文BizTalk 2013 R2 known bugs, issues & quirks,BUG:BIZTALK WCF-WEBHTTP适配器未在错误上设置消息类型
更新:在BizTalk 2013 R2的CU 5之后,以下内容不再适用,现在它会抛出错误。
另请注意,如果最终系统抛出500状态代码,则不会将其作为错误抛出,您必须自己检查状态代码。