我使用 WCF-WebHttp SendPort 从 BizTalk 编排调用供应商的 REST 服务。
即使我在具有scope.exception的业务流程中捕获了此System.Exception,SendPort仍然处于挂起状态。是否有办法防止挂起(WCF-CustomBehavior 或绑定?)大多数外部 REST 服务的 BizTalk 使用者如何处理这个问题?
有许多不同的错误,有些是为了安全,有些是为了数据/配置,可能会返回 400 状态,下面是一个示例:
发送到发送端口“spP44WebHttp”上的适配器“WCF-WebHttp”的消息
与 URI“https://test.abc.com/api/v3 https://test.abc.com/api/v3“已暂停。错误详细信息:
System.Net.WebException:远程服务器返回意外的异常
响应:(400) 错误请求。 {“httpStatusCode”:400,“httpMessage”:“错误
Request","errorMessage":"无法处理发货
请求","错误":[{"严重性":"错误","消息":"客户-X 不
支持这些配件:
AIRPU","来源":"系统"}],"supportReferenceId":"e0117674-9f83-4b42-b861-2e9b9f636323"}
当您在任何其他双向 WCF 发送(例如 WCF-SQL)周围出现范围/异常时,当您捕获错误时,它不会使 SendPort 挂起,不是吗?
有关的:BizTalk 捕获 Http 响应代码 https://stackoverflow.com/questions/31613171/biztalk-catch-http-response-code
更新 1:我发现这篇 TechNet 帖子似乎是正确的:https://social.technet.microsoft.com/wiki/contents/articles/33238.biztalk-server-2013-r2-handle-exceptions-from-rest-services-in-orchestration.aspx https://social.technet.microsoft.com/wiki/contents/articles/33238.biztalk-server-2013-r2-handle-exceptions-from-rest-services-in-orchestration.aspx然而,它指出他们无法发现错误。我可以捕获 400 错误,但我不喜欢的是挂起的发送端口。
更新 2:我正在尝试自定义行为,我将在 BeforeSendReply 中重置状态代码。但是使用调试器,我看到以下方法运行:Validate()、AddBindingParameters()、ApplyClientBehaviors()、BeforeSendRequest(),但是 - 我从未看到 BeforeSendReply() 运行。因此,如果 BizTalk 适配器不喜欢 400 状态,是否会阻止它返回自定义行为?