通过BizTalk WCF适配器实现异构数据库/系统间的数据同步

概述

 

数据库与数据库之间的同步,是EAI(企业应用整合)非常普遍的需求,BizTalk作为企业ESB平台,以SOA的架构方式来实现异构系统之间的整合,今天我们就来介绍如何使用BizTalk的适配器来实现数据库与数据库之间的数据同步。

在本篇文章当中,我以SQL Server到SQL Server之间同步来举例,用到了BizTalk的WCF-SQL适配器。

在这里说明一下,若需要与其他数据库进行同步,如SQL Server到Oracle、Oracle到IBM DB2的实现方式大体相同,只是所选用的适配器与连接配置有少许不同而已。

简单步骤我就直接用文字来描述了,之前的很多文章贴过简单步骤的贴图,在这里只把关键步骤的截图贴出来,废话不多说,直接切入正题。

 

示例程序

 

场景介绍

场景非常简单,我们要实现的就是将源表中的3条数据通过BizTalk导入到目标表当中。

使用WCF-SQL获取源数据表中的信息

  • 在Visual Studio 2010中创建BizTalk解决方案,并命名为SQL_TO_SQL;
  • Add Generated Items选择Consume Adapter Service点击Add;
  • 选择sqlBinding并点击右边的Configure按钮;
  • Security选项卡中,选择SQL Server的安全认证方式,在这里我们用Username认证方式,填写用户名和密码;
  • URI Properties选项卡中配置ServerlocalhostInitialCatalog为数据库TestDBInboundIdTestID
    说明一下InboundId,在这里我们采用轮询的方式来获取SQL源数据表当中的数据,选择这种方式我们必须指定InboundId来确保命名空间是唯一的,这个InboundId不能与其他的项目中的InboundId重复。
  • Binding Properties选项卡中,配置InboundOperation Type选择TypedPollingPolledDataAvailable StatementSELECT COUNT(1) FROM Source_TablePollingStatementSELECT Source_ID,Source_Name,Source_Time FROM Source_Table;
    InboundOperationType – 属性有几种类型可选:Polling,TypedPolling,Notification。
    Polling是轮询方式,但是这种方式是不带架构的,TypedPolling也是轮询方式,这种方式可以带出架构。Notification是用于数据有变化时进行相关通知。
    如果需要轮询数据,又要能刷出数据架构,需要采用TypedPolling方式。
    PollingIntervalInSecond – 轮询间隔时间。
    PolledDataAvailableStatement – 执行轮询的条件,这里一般是个select语句,这条语句应该返回一个单个的结果集,只要这个结果集的第一行第一列必须有值(如果是空结果集会报错),应该是个大于等于0的整数值。如果这个值大于0则执行下面PollingStatement指定的SQL命令真正的开始轮询的操作。如果这个值等于0,则轮询语句不执行。
    PollingStatement – 轮询命令,可以是SQL语句,也可以是存储过程。


  • Select Contract type中选择Service (Inbound operations),并选择TypedPolling


  • 可以看到在项目中生成了2个文件,1个是根据前面设置的轮询命令生成的Schema,1个是可以导入到BizTalk的接收位置和端口的XML绑定文件;

使用WCF-SQL向目标数据表插入数据

  • Add Generated Items选择Consume Adapter Service点击Add;
  • 选择sqlBinding并点击右边的Configure按钮;
  • Security选项卡中,选择SQL Server的安全认证方式,在这里我们用Username认证方式,填写用户名和密码;
  • URI Properties选项卡中配置ServerlocalhostInitialCatalog为数据库TestDBInboundIdTestID
  • Binding Properties选项卡中我们不需要配置TypedPolling,应当将其恢复为初始状态;


  • 配置好之后选择Tables当中的Destination_Table表并添加Insert操作,在Filename Prefix处可为其设置命名前缀,这个地方不是必须填的,但是我们在这里将其设置为INSERTDES以保证文件命名更加整洁;


  • 配置完成后,可以看到在项目中生成了4个文件,3个是根据前面设置的Insert命令生成的Schema,1个是可以导入到BizTalk的接收位置和端口的XML绑定文件;
  • 对该解决方案进行编译。

创建并配置BizTalk业务流程

  • 添加BizTalk Orchestration文件并将其命名为Orchestration_SQLtoSQL
  • Orchestration View中右键Messages->New Message添加消息,将其命名为Msg_GetData,并设置Message TypeSQL_TO_SQL.TypedPolling_TestID.TypedPolling


  • 按照上述方法创建另一个消息,命名为Msg_SendData,将Message Type设置为SQL_TO_SQL.INSERTDESTableOperation_dbo_Destination_Table.Insert


  • 创建好接收消息和发送消息之后,按照如下图所示搭建业务流程并配置数据表之间的映射关系;




部署并配置BizTalk应用程序

  • 右键BizTalk解决方案对其进行部署,发布到BizTalk管理控制台当中,在控制台当中找到所发布的BizTalk的应用程序,右键点击Configure...
  • Host选择BizTalkServerApplication
  • 配置接收端口
  • 将接收端口命名为GetSQLPort,并新建接收位置,配置其接收位置为WCF-SQL适配器,接收管道选择XMLReceive
  • 在WCF-SQL右侧点击Configure...配置适配器属性,配置内容与在Visual Studio中需保持一致,ServerlocalhostInitialCatalogTestDBInboundIdTestID,最后生成的URI为mssql://localhost//TestDB?InboundId=TestID
  • Binding选项卡中的配置见Visual Studio中接收端口的配置;
  • Other选项卡中选择User account方式来配置登陆信息;
  • 配置发送端口
  • 将发送端口命名为SendSQLPort,选择WCF-SQL适配器,发送管道使用默认的PassThruTransmit,同样点击Configure...来配置WCF-SQL适配器;
  • 在这里要注意,发送端口不用配置InboundId这一项,生成的URI最终应为mssql://localhost//TestDB?才是正确的;
  • Binding选项卡中暂不做任何配置;
  • Credentials选项卡中配置数据库登录信息,并且该登录用户必须拥有目标数据表的写权限
  • 配置完成后点击OK并启动BizTalk应用程序,其运行结果如下图所示,至此我们已经成功地将源数据表中的数据导入到目标表当中了,这里我们设置的轮询时间间隔为30秒一次,可根据业务需求作出相应的配置,并且该Demo不仅仅局限于SQL到SQL之间的同步,若想与其他数据库同步,则在配置时选用其它数据库的适配器即可,如:WCF-OracleDB

posted on 2011-07-15 01:12  海南一哥  阅读(218)  评论(0编辑  收藏  举报

导航