如何订阅在BizTalk业务流程中创建的消息?

时间:2013-03-21 18:29:23

标签: biztalk biztalk-2010 biztalk-orchestrations

我有一个收集消息的业务流程。目标名称空间为“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过滤器的发送端口。

即使消息正在流经业务流程,我的发送端口也没有收到消息。这是不正确的过滤器吗?

2 个答案:

答案 0 :(得分:3)

您是要订阅“MyMessage”消息,还是发送到绑定到物理WCF发送端口的逻辑发送端口的相同消息?

你已说过:

  

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

消息未发布到MsgBox

根据您的描述,我建议您的业务流程中没有“MyMessage”消息的“发送形状/逻辑发送端口”组合,这就是为什么您无法手动订阅此消息类型的原因。发送端口过滤器。您没有提到“失败的路由报告”消息的事实进一步暗示了这种情况 - 当没有找到要发布到MsgBox的消息的订阅时,会生成此消息类型。

捕获邮件的'MessageType'

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

如果您不确定要使用哪种MessageType,可以通过一个简单的方法来确定此信息:

  1. 停止(不是Unenlist)WCF发送端口
  2. 正常通过您的业务流程发送消息 - 该消息将在WCF发送端口的BizTalk管理控制台中标记为“已暂停可恢复”。
  3. 在BizTalk管理控制台中打开消息并查看其“消息上下文”;在消息上下文中,您将看到其“MessageType”属性,然后您可以使用该属性来了解要使用的订阅过滤器。
  4. 启动WCF发送端口以刷新消息。
  5. 或者,如果您不想更改您的业务流程,您可以尝试在通过(原始)WCF发送端口中的发送管道时归档您的消息 - 编写您自己的归档组件或使用{{3 }}。通过以这种方式使用归档组件,您将节省额外订阅和相关发送端口维护的费用。

    <强>更新

    这听起来很像OP没有从他们的业务流程中向消息框发送中间消息(请参阅注释)。消息订阅仅在消息发布到消息框时才起作用 - 在这种情况下,所讨论的消息(“消息B”)是仅存在于上下文中的消息。编排的生命周期。 OP需要将消息发送到Orchestration中的Direct Bound端口,以允许通过发送端口订阅消息。

答案 1 :(得分:0)

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