如前所述,BizTalk Server 不会实例化独立适配器。 相反,它们被实例化并托管在另一个进程中。 适配器负责为 IBTTransportProxy 创建其传输代理 QueryInterface,然后调用 IBTTransportProxy。RegisterIsolatedReceiver 注册到消息传送引擎。
注册要求适配器将其中一个已配置且已启用的接收位置传递给消息引擎。 适配器的主机进程凭据必须是 BizTalk 独立主机用户组的成员。 此处仅使用模拟是不够的,除非用户是该组的成员。 此外,将查询适配器以确保其具有正确的 ClassID ,并在为该主机实例配置的计算机上运行。 在适配器成功向其传输代理注册后,其配置通过调用 IPersistPropertyBag 接口的 Load 方法发送给适配器。
下图说明了此 API 调用序列。 蓝色接口由适配器实现。
以下代码片段演示了注册 API 调用:
using Microsoft.BizTalk.TransportProxy.Interop;
using Microsoft.BizTalk.Component.Interop;
using Microsoft.BizTalk.Message.Interop;
public class MyAdapter : IBTTransport,
IBTTransportConfig,
IBTTransportControl,
IBaseComponent
{
...
private IBTTransportProxy transportProxy;
public void Register(string uri)
{
// Create the Transport Proxy...
this.transportProxy =
(IBTTransportProxy)new BTTransportProxy();
// Register on of the adapters uri’s with the TP
this.transportProxy.RegisterIsolatedReceiver(
uri,
(IBTTransportConfig)this );
}
}
实现提示: 我们建议适配器记录正在进行中的工作数量。 适配器应阻止 终止 ,直到消息计数达到零。 在接收端,此工作包括尚未发布到 BizTalk Server 的任何未完成请求。 调用 Terminate 后,不会将响应消息传送到接收适配器。
对于发送适配器,正在处理的消息应妥善处理。 这意味着应从适配器的专用应用程序消息队列中删除成功传递的任何消息,以防止多次发送消息。
调用 Terminate 后,消息引擎不接受发布新消息的请求,但请求-响应对的响应消息除外。