2011-01-31 46 views
0

我有一个业务流程,名为MyUsefulOrch,托管在应用程序MySharedApp中。MessageBox直接绑定端口上的相关性

MyUsefulOrch有一个入站messagebox-direct-bound端口来接收请求,并且在做了一些有用的工作之后,出站messagebox-direct-bound端口发送消息给调用者。

现在,我还有一个叫编排MyCallerOrch这要由MyUsefulOrch提供有用的处理中受益。但是,MyCallerOrch位于不同的应用程序中,MyCallingApp

我不希望有包含MyUsefulOrchMyCallerOrch大会的任何引用。

我现在的问题是确保我可以从MyCallerOrch将消息发送到MyUsefulOrch并接收来自它的响应。

啊哈!相关性应该可以做到!但是,我如何才能在这种情况下获得相关性?

例如:

  • 我会把相关性id的属性架构和东西公正的把它发送到MessageBox之前进入的GUID从MyCallerOrch这个属性下的消息上下文?
  • 如何确保MyCallerOrch只接收需要从MyUsefulOrch收到的答复?
  • 是否需要将关联id值放入两个业务流程之间发送的消息的消息正文中?

我非常感谢任何帮助,尽可能描述性地描述如何实现这一目标。

非常感谢提前。

回答

1

我认为你是在正确的轨道

在几乎自2个应用程序将消息发送到海誓山盟,如果你使用强类型的模式,无论是应用程序将需要了解的模式。 在这种情况下,建议您将公共架构分离为单独的程序集,并从两个编排应用程序中引用它。 (在服务器上注册的模式必须具有唯一的XMLNS #ROOT,即使在多个应用程序中也是如此)

但是,如果您确实无法忍受共享模式程序集引用,则可能需要使用非类型化消息。

理查德Seroter有一个例子here

他的文章还介绍了汽车冲压GUID的上下文属性相关的技术。

编辑:好点。可以在没有管道的情况下在消息上宣传自定义上下文属性 - 请参阅技巧herehere - 这足以将上下文属性发送到MyUsefulOrch,并且类似地,可以在来自MyUsefulOrch内的返回消息上提升定制上下文MyUsefulOrch不需要任何关联)。然而,我无法想象如何在返回MyCallingOrch时自定义上下文属性可用于继续“跟随关联”,除非您将新的相关属性添加到返回消息中。

+0

感谢您的回复。那么你是否说我需要在某处使用管道来确保相关ID被提升到消息上下文?我正在使用直接绑定的端口,因此没有可用的流水线。顺便说一句,我可以愉快地引用共享模式的DLL,所以不需要无类型的消息。 – 2011-01-31 13:03:11

+0

好的,谢谢你。在使用请求发送的guid之后,我使用了在有用orch的出站响应消息上初始化相关集的技巧。现在所有的工作,呼叫者接收形状“跟随”相关设置现在收到响应消息。我希望这可以用于多个呼叫者。我现在会测试这个。 – 2011-02-02 12:09:05

3

如果在调用程序业务流程中使用双向请求/响应发送端口将消息发送到有用的业务流程,那么可以使用相关性将相关消息路由回调用程序的用户操作符。

诀窍是你需要修改有用的orch(当然,使它更有用)。

如果您不/无法控制用户配置的呼叫者是否期待回应,则需要将入站(请求)端口设置为单向端口。然后通过发送到单向出站(响应)端口来完成编排。

为确保从双向/请求 - 响应调用方接收到的消息能够正确路由回去,有用orch中出站消息的构造形状将需要使用消息分配形状将以下消息属性设置为true:

  • BTS.RouteDirectToTP
  • BTS.IsRequestResponse

之前设置这两个属性,不过,也确保在T像做msgOut(*) f= msgIn(*);他具有相同的消息分配形状,以确保其他属性被复制。如果入站和出站消息不相同,则必须一次一个地手动设置每个必需的属性。

当然,除了上述两个属性之外,这些属性有助于确保有用orch的结果正确路由给调用者。他们应该是你的相关集内,分别是:

  • BTS.CorrelationToken
  • BTS.EpmRRCorrelationToken
  • BTS.IsRequestResponse
  • BTS.ReqRespTransmitPipelineID
  • BTS.RouteDirectToTP

我变得有点超前了,但是,因为您将相关集分配给出站s只有在BTS.EpmRRCorrelationToken exists msgIn。这很关键。我用一个决定形式来表达一个决定,其决定基于那个确切的短语。如果结果为真,则将先前构建的消息发送出,并将上面的相关集分配为初始化相关集。这将导致BizTalk将消息路由回调用方作为其预期响应。

如果决定的结果是错误的,那么有用的编排的调用者是单向的。你仍然可能想发送一个结果(并且让其他人订阅它)。您甚至可以使用与双向响应相同的发送端口,只需要而不是分配相关集。

当然,你会想彻底地测试这个。它在我使用它的一种情况下对我有用,但这并不能免除其他人的尽职调查。