BizTalk - 为什么在控制台中出现已处理异常的暂停消息?

BizTalk - Why does a suspended message appear in the console for a handled exception?

这是我们在一些 BizTalk 业务流程中的常见结构的图像:

因此,当我们从 API 获取信息并且该帐户不存在时,我们将终止编排。这工作正常,我可以看到编排执行此操作并在它应该终止时终止,但我不明白的是为什么我在控制台中看到来自 GET 的暂停消息?由于异常处理有效,这不应该停止在控制台中显示错误吗?

作为解决此问题的方法,我考虑过使用管道组件来检查响应消息,如果它包含将被忽略的内容,则只需 return null 代替消息。这会产生预期的效果吗?我更感兴趣的是为什么我会在控制台中看到暂停消息。

是的,这是 WCF-WebHttp 适配器的一个已知问题,它与以下事实有关:它将它作为 SOAP 格式错误抛回,但没有设置 MessageType 上下文 属性(请参阅我的 blog post 并查找错误:BizTalk WCF-WebHttp 适配器未设置错误消息类型)。因此,虽然异常在 Orchestration 处被抛回并且可以在那里处理,但消息不是因为 BizTalk 不知道它是什么类型并且它挂起。

我们使用的解决方法是

  1. 为发送端口上的失败消息设置启用路由
  2. 要有一个发送端口使用 BTS.SPName = xxxx 过滤器订阅来自该发送端口的所有响应消息,然后发送端口将其发送到自定义 NULL 适配器(丢弃消息),是的,您的 Orchestration 仍然会得到良好的响应和异常。
  3. 更新处理来自我们确实想要转到异常处理的其他发送端口的路由错误的发送端口,以排除我们正在通过编排处理的那些发送端口。