创建自定义适配器提供程序

执行解析程序后,如前几节所述,动态解析服务会检查结果是否为终结点 (不是转换) 。 如果它是终结点,则服务将实例化适配器管理器,该管理器是 AdapterMgr 类的实例。

适配器管理器验证并修复传输类型和出站传输位置。 如果传输类型仍未解析,并且 URL 以“http”或“https”开头,则适配器管理器会将传输类型设置为“WCF-WSHttp”。

接下来,适配器管理器验证传输类型是否等于有效的 Microsoft BizTalk Server适配器,然后返回其属性命名空间。 此过程仅对所有适配器运行一次,并将结果存储在缓存中,以避免重复查询使用同一适配器的其他传入消息。

适配器管理器使用不带“://”后缀的传输类型 () 来确定适当的适配器提供程序。 适配器提供程序是必须实现 IAdapterProvider 接口的 自定义程序集。 适配器提供程序使用解析程序生成的 Dictionary 实例中解析结构的属性来设置消息的所有协议特定的属性,使 Microsoft BizTalk Server运行时引擎能够执行动态解析。

与上一部分) 中描述的解析程序 (一样,动态解析机制使用 Esb.config 配置文件中的条目来查找适配器提供程序。 以下 XML 显示配置文件的 部分。

<adapterProviders cacheManager= "Adapter Providers Cache Manager"  absoluteExpiration="3600">  
     <adapterProvider name="WCF-WSHttp" type="Microsoft.Practices.ESB.Adapter.WcfWSHttp.AdapterProvider, Microsoft.Practices.ESB.Adapter.WcfWSHttp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c62dd63c784d6e22" moniker="Http,Https" />  
     <adapterProvider name="WCF-BasicHttp" type="Microsoft.Practices.ESB.Adapter.WcfBasicHttp.AdapterProvider, Microsoft.Practices.ESB.Adapter.WcfBasicHttp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c62dd63c784d6e22" moniker="Http,Https" />  
     <adapterProvider name="WCF-Custom" type="Microsoft.Practices.ESB.Adapter.WcfCustom.AdapterProvider, Microsoft.Practices.ESB.Adapter.WcfCustom, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c62dd63c784d6e22" moniker="mssql" />  
     <adapterProvider name="SMTP" type="Microsoft.Practices.ESB.Adapter.SMTP.AdapterProvider, Microsoft.Practices.ESB.Adapter.SMTP, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c62dd63c784d6e22" moniker="smtp" />  
     <adapterProvider name="FTP" type="Microsoft.Practices.ESB.Adapter.FTP.AdapterProvider, Microsoft.Practices.ESB.Adapter.FTP, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c62dd63c784d6e22">  
          <adapterConfig>  
               <add name="DefaultUsername" value="anonymous" />  
               <add name="DefaultPassword" value="" />  
          </adapterConfig>  
     </adapterProvider>  
     <adapterProvider name="MQSeries" type="Microsoft.Practices.ESB.Adapter.MQSeries.AdapterProvider, Microsoft.Practices.ESB.Adapter.MQSeries, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c62dd63c784d6e22" moniker="MQS" adapterAssembly="MQSeries, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />  
     <adapterProvider name="FILE" type="Microsoft.Practices.ESB.Adapter.FILE.AdapterProvider, Microsoft.Practices.ESB.Adapter.FILE, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c62dd63c784d6e22" moniker="File" />  
</adapterProviders>  

创建自定义适配器提供程序

适配器管理器 (AdapterMgr 类的实例,) 配置文件中查找适配器提供程序并加载相应的程序集。 动态解析机制缓存 IAdapterProvider 接口的所有加载的具体实现,以避免在多个传入消息使用同一适配器提供程序时重复读取配置信息和加载程序集。

最后,适配器管理器执行 IAdapterProvider 接口的具体实现的 SetEndPoint 方法,管道组件将消息返回到 BizTalk Message Box 数据库。

创建自定义适配器提供程序

  1. 创建派生自 BaseAdapterProvider 基类的程序集,并包含设置消息的终结点上下文属性的 SetEndPoint 方法。

  2. 通过使用 <adapterProvider> 元素将适配器提供程序添加到 Esb.config 配置文件中来注册适配器提供程序,其中适配器的名称为 name 属性,类的完全限定名称作为 类型 属性,将名字对象作为 名字对象 属性 (多个值应用逗号) 分隔,还可以选择将实际适配器的程序集分隔为 adapterAssembly 属性。

  3. 在全局程序集缓存中注册新程序集。