0

我有一个需要消息的编排。目标命名空间是“ http://microsoft.com/HealthCare/HL7/2X ”,根元素是“ORU_R01_23_GLO_DEF”

在编排中,我将消息映射到构造形状中的中间消息类型。目标命名空间是“ http://mycompany.com/myapplication ”,根元素是“MyMessage”。然后,“MyMessage”消息被进一步映射,然后使用编排中的逻辑发送端口发送到 Web 服务。然后将 WCF 发送端口绑定到编排,一切正常。一切都按预期工作。

在不改变编排的情况下,我想创建一个订阅中间“MyMessage”消息并将其写入文件的发送端口。为此,我创建了一个带有 BTS.MessageType = http://mycompany.com/myapplication#MyMessage过滤器的发送端口。

即使消息流经编排,我的发送端口也没有接收到消息。这是使用不正确的过滤器吗?

4

2 回答 2

3

您是否尝试订阅“MyMessage”消息,或发送到绑定到物理 WCF 发送端口的逻辑发送端口的同一消息?

您曾表示:

然后,“MyMessage”消息被进一步映射,然后使用编排中的逻辑发送端口发送到 Web 服务。然后将 WCF 发送端口绑定到编排,一切正常。

消息未发布到 MsgBox

根据您的描述,我建议您在“MyMessage”消息的编排中没有发送形状/逻辑发送端口组合,这就是为什么您不能在发送端口过滤器中手动订阅此消息类型的原因. 您没有提到“失败的路由报告”消息的事实进一步表明情况确实如此 - 当没有为要发布到 MsgBox 的消息找到订阅时,会生成此消息类型。

捕获消息的“MessageType”

但是,如果您需要捕获通过 WCF 发送端口发送的消息的副本,则需要确定MessageType 并在将消息写入文件的第二个发送端口订阅中使用它。

如果您不确定要使用什么 MessageType,有一个简单的技巧可以确定此信息:

  1. 停止(不是取消登记)WCF 发送端口
  2. 像往常一样通过您的业务流程发送消息 - 该消息将在 WCF 发送端口上的 BizTalk 管理控制台中标记为“暂停可恢复”。
  3. 在 BizTalk 管理控制台中打开消息并查看其“消息上下文”;在消息上下文中,您将看到它的“MessageType”属性,然后您可以使用它来了解要使用的订阅过滤器。
  4. 启动 WCF 发送端口以刷新消息。

或者,如果您不想更改您的编排,您可以尝试在消息通过(原始)WCF 发送端口中的发送管道时归档您的消息 - 编写您自己的归档组件或使用现有的商业组件。通过以这种方式使用归档组件,您将节省额外订阅和相关发送端口维护的费用。

更新:

听起来很像 OP 没有从他们的编排将中间消息发送到消息框(请参阅评论)。消息订阅仅在消息发布到消息框时才起作用 - 在这种情况下,有问题的消息(“消息 B”)是仅存在于编排的上下文和生命周期内的中间消息。OP 需要将消息发送到编排内的直接绑定端口,以允许通过发送端口订阅消息。

于 2013-03-22T10:55:28.077 回答
0

验证发送端口的管道。应该通过 XML,而不是通过。

于 2015-06-18T14:01:10.647 回答