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

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

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

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

适配器管理器使用传输类型(不含“://”后缀)来确定相应的适配器提供程序。 适配器提供程序是必须实现 IAdapterProvider 接口的自定义程序集。 适配器提供程序使用解析程序生成的字典实例中解析结构的属性来设置消息的所有特定于协议的属性,使 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. 通过在 Esb.config 配置文件中添加 <adapterProvider> 元素注册适配器提供程序,使用适配器的名称作为 name 属性,类的完全限定名称作为 type 属性,标识符作为 moniker 属性(多个值应用逗号分隔),并可选择性地将实际适配器的程序集作为 adapterAssembly 属性。

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