实例化独立适配器
如前所述,独立适配器不会通过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 );
}
}
实现提示: 建议适配器保留正在进行的工作的计数。 适配器应阻止 Terminate ,直到消息计数达到零。 在接收端,此工作包括尚未发布到BizTalk Server的任何未完成请求。 调用 Terminate 后,响应消息不会传递到接收适配器。
对于发送适配器,应适当处理正在进行的消息。 这意味着成功传递的任何消息都应从适配器的专用应用程序消息队列中删除,以防止消息多次发送。
调用 Terminate 后,消息传送引擎不接受发布新消息的请求,但请求-响应对的响应消息除外。