实例化和初始化发送适配器

默认情况下,在将第一条消息传递到它们之前,不会实例化发送适配器,此过程称为“延迟创建”。默认延迟创建方法有助于节省系统资源。 创建发送适配器之后,在停止 BizTalk Server 服务之前该发送适配器将一直被缓存并且处于活动状态。

功能枚举的 InitTransmitterOnServiceStart 成员指示消息引擎在服务启动时创建发送适配器,而不是根据需要使用默认延迟创建。

在消息的批处理方面,消息的发送是一个不同于消息接收的模型。 对于接收,适配器的传入消息将插入到从消息引擎获得的某个批。 对于发送,消息引擎从适配器获得批并将要传输的消息发送到适配器。 这两种情况都使用传输代理来获取消息批对象。

如何初始化发送适配器

若要启用对传输代理的配置和绑定,适配器必须实现以下配置接口:

  • IBTTransport

  • IBaseComponent

  • IBTTransportControl

  • IPersistPropertyBag

    以下步骤介绍了在初始化发送适配器时所涉及事件的顺序:

  1. 当消息引擎初始化发送适配器时,它首先执行 QueryInterface for IPersistPropertyBag,这是一个可选接口。 如果适配器实现 接口,处理程序配置将在 Load 方法调用中传递给适配器。 适配器将使用此信息来确保它得到正确地配置。

  2. 消息引擎为 IBTTransportControl 执行 QueryInterface,这是一个必需的接口。

  3. 引擎调用 IBTTransportControl.Initialize,传入适配器的传输代理。

  4. 消息传送引擎为 IBTTransmitter 执行 QueryInterface

    如果消息引擎找到该接口,则适配器将被视为不支持批的发送器。

    如果消息引擎未发现此接口,则消息引擎将执行适用于 IBTBatchTransmitterQueryInterface,其发现指示适配器是批处理感知发送器。

    如果消息引擎找不到这两个接口中的任何一个,则会出现错误,从而导致初始化失败。 如果未找到任何必需接口,则初始化将失败。

    下图说明了 API 调用的顺序;蓝色的接口由适配器实现。

    显示初始化失败时发生的情况的图像。

    适配器在初始化和配置完毕后就可发送消息。

    下图显示了初始化发送适配器时所涉及的对象交互。

    显示初始化发送适配器所涉及的对象交互的图像。
    初始化发送适配器的工作流

注意

适配器不应在 IBTTransportControl.InitializeIPersistPropertyBag.Load 等调用中阻止消息引擎。 在这些调用中执行过多的处理会影响服务启动时间。