如何在调用的业务流程中创建接收订阅

尽管可以在启动业务流程时通过 “启动业务流程” 形状传递消息作为参数,但在某些情况下,你可能希望在调用后将消息从调用方业务流程发送到调用的业务流程。 例如,您可能不清楚调用时要传递什么消息,或者其他业务流程可能需要向调用的业务流程动态发送消息。

应该通过传入一个相关来向调用的业务流程发送消息,以便调用的业务流程能够创建由该相关帮助定义的订阅,然后使用该订阅来接收消息。 不过,仅仅靠传入一个相关,然后由调用的业务流程基于该相关创建订阅,再根据该订阅接收消息,还是不够的。 如果使用此方法,则从调用方业务流程发送到调用的业务流程的消息将导致错误:“无法路由已发布的消息,因为找不到订阅服务器。”这是由于以下原因:

  • 调用的业务流程中存在争用情况。

  • 不存在提交点,调用的业务流程无法向 MessageBox 数据库发送订阅以便路由,所以无法接收消息。

    解决此问题的方法之一是执行以下步骤:

  1. 在调用方业务流程中,应具有某个激活接收以接收消息。 在调用方业务流程中收到消息后,初始化相关集,然后通过 “启动业务流程” 形状传递相关集和自相关接收直接绑定端口。 传入的端口将变为调用的业务流程中的发送端口,您将用该端口发回消息,以便与调用方业务流程同步。

  2. 在调用的业务流程中,将消息通过自相关端口发回调用方业务流程。 这样即可与调用方业务流程保持同步,避免出现争用情况,并且在向 MessageBox 创建接收订阅以便路由的过程中在调用的业务流程中提供提交点。

  3. 调用方业务流程通过自相关端口接收消息,并与调用的业务流程保持同步。 请注意,使用自相关端口接收消息时不需要再指定相关。 现在可以安全地从调用方业务流程向调用的业务流程发送消息,调用的业务流程将根据相关来接收消息。

    尽管上述方法可以实现目标,但更好的做法是传入对接收所基于的相关进行初始化的消息。 通过自相关端口对调用方业务流程和调用的业务流程进行同步时,我们建议始终传入对相关进行初始化所需的消息。 以下步骤提供了最为可靠且性能最佳的方法:

  4. 在调用方业务流程中,应具有某个激活接收以接收消息。 收到消息后,通过 “启动业务流程” 形状传递消息和自相关接收直接绑定端口。 您传入的消息将用于在调用的业务流程中对相关进行初始化。 传入的端口将变为调用的业务流程中的发送端口,您将用该端口发回消息,以便与调用方业务流程同步。

  5. 在调用的业务流程中,对相关进行初始化,然后将消息发回调用方业务流程。 这样即可与调用方业务流程保持同步,避免出现争用情况,并且在向 MessageBox 创建接收订阅以便路由的过程中在调用的业务流程中提供提交点。

  6. 调用方业务流程通过自相关端口接收消息,并与调用的业务流程保持同步。 请注意,自相关端口接收不需要相关关注者。 现在可以安全地从调用方业务流程向调用的业务流程发送消息,调用的业务流程将根据相关来接收消息。

另请参阅

在业务流程中使用关联
如何使用 Self-Correlating 直接绑定端口