BizTalk Server 2010 + SQL Server 2008 R2 - 通过集成创造更大价值 [ 下篇 ]

创建测试对象

上一篇我们通过WCF-SQL适配器向导创建了SQL存储过程所需的架构,这样我们就可以通过它来匹配到这个存储过程,但在这之前我们需要设计一个测试对象来对存储过程进行调用。这个测试对象会包含一个映射文件,这个映射文件负责将来自StoreInventoryUpdate的消息转换为UpdateInventory_dbo架构的消息,另外还包含一个业务流程,它来负责BizTalk Server与SQL Server之间的相互通信与调度。


创建映射来转换WCF-SQL适配器所需消息

1. 先来创建一个映射文件,将其命名为StoreInventoryUpdate_to_SqlUpdateInventoryRequest.btm,单击打开源架构我们选择InventoryUpdate.Orchestration > References > InventoryUpdate.Schemas > Schemas, 点击 InventoryUpdate.Schemas.StoreInventoryUpdate, 之后点击确定

7

StoreInventoryUpdate描述了一个请求更新仓储库存的消息架构,我们假设它是由玩具店POS系统和ERP系统两者共同生成的,也就是说这个消息中一部分信息是来自POS系统,另一部分消息是来自ERP系统。

2. 点击右侧面板的打开目标架构,选择Schema节点下的UpdateInventory_dbo,点击确定。并按照如下图所示的映射关系来匹配各个节点。

8


设计业务流程

1. 我们在业务流程设计器中创建如下控件。

9

10

2. 设置Inventory Update控件激活属性为True;在Log New Update表达式控件中键入代码:System.Diagnostics.EventLog.WriteEntry("UpdateInventoryTestHarness", "A new request to update a store's inventory has been received.");在Log Success表达式控件中键入代码:System.Diagnostics.EventLog.WriteEntry("UpdateInventoryTestHarness", "Store Inventory Updated.");

3. 在业务流程视图中,右键点击消息->新建消息->改变标识符msgStoreInventoryUpdate->选择消息类型架构-><从引用的程序集中选择…>->InventoryUpdate.Schema->StoreInventoryUpdate->确定

4. 用上述方法创建另一个消息,右键点击消息->新建消息->改变标识符msgUpdateDatabseReq->选择消息类型多部分消息类型->_InputMessage。这个消息将会被映射文件构造为一个StoreInventoryUpdate消息并用来调用存储过程。

5. 再另外创建一个消息,右键点击消息->新建消息->改变标识符msgUpdateDatabseResp->选择消息类型多部分消息类型->_OutputMessage。这个消息将负责接收一个调用存储过程后的返回值。

6. 配置接收发送控件的消息属性。

11

7. 添加一个消息构造控件和一个转换控件,放在Log New Update下方,将消息构造控件命名为Create Update Database Request,并设置构造的消息为msgUpdateDatabaseReq,将转换控件命名为StoreInventoryUpdate_to_SqlUpdateInventoryRequest,在设置名称中点击后面的“…”按钮,打开转换配置界面,选择现有映射,并在完全限定的映射名称中点击下拉框选择InventoryUpdate.Orchestrations.StoreInventoryUpdate_to_SqlUpdateInventoryRequest,之后在源中选择msgStoreInventoryUpdate,在目标中设置msgUpdateDatabaseReq.parameters,点击确定。

12

8. 在端口图面中右键点击新建配置的端口->设置名称GetUpdates->新建端口类型,将端口类型命名为InventoryUpdatePortType通信模式选择单向->通信方向选择始终在此端口上接收消息->完成。之后将GetUpdates端口与Inventory Update接收控件相连。

9. 按照上述方法再创建另一个端口->设置名称UpdateDatabase->点击使用现有端口类型并选择Inventory.Orchestration.Procedures_dbo->通信方向选择始终在此端口上发送消息。之后将端口的Request连接到Update Database Request,将端口的Response连接到Update Database Response

13


部署和测试

至此我们已经设计好了业务流程,现在我们要对该流程进行部署和进一步的配置,在配置好之后,我们会使用测试消息来看一下BizTalk与SQL之间是如何交互的。

1. 在解决方案资源管理器中,右键点击InventoryUpdate解决方案,选择部署解决方案。部署好之后,打开BizTalk Server管理->右键InventoryUpdate应用程序->点击配置->选择UpdateStoreInventoryTestHarness流程->选择主机为BizTalkServerApplication->设置该流程上逻辑端口 GetUpdates,选择新建接收端口,打开接收端口属性窗口->设置名称InventoryUpdates->选择接收位置,点击新建,打开接受位置属性窗口,设置名称为InventoryUpdates_FILE->设置传输类型FILE并点击配置按钮打开FILE传输属性窗口->设置接收文件夹路径为C:/BizTalk2010Labs/Labs/Integration/WCF-SQL/In->点击确定->设置接收管道为XMLReceive

14

2. 配置WCF-SQL发送端口。在配置应用程序窗口中配置输出端口,选择新建发送端口->在发送端口属性窗口中,设置名称为UpdateInventoryDatabase_WCF-SQL->设置传输类型WCF-SQL并点击配置按钮打开WCF-SQL传输属性窗口->点击配置按钮,制定ServerlocalhostInitialCatalogTailspinToys数据库->设置SOAP操作头Procedure/dbo/sp_UpdateInventory->设置接收管道XMLReceive->点击确定完成对WCF-SQL端口的配置。

15

16


测试流程

1. 在BizTalk管理控制台中启用InventoryUpdate应用,之后我们准备了一个XML文件,来模拟从POS系统发出一个消息,这个消息会减少编号为1234的仓库中产品的数量。

17

2. 先来看一下仓库编号为1234所对应的数据表在更新之前的内容。

18

3. 现在我们把准备好的这个XML消息放到上面配置好的接收端口所监听的文件夹In当中,并回到BizTalk管理控制台查看事件查看器,还记得之前在流程当中使用表达式控件来通过代码记录接收消息后记录在日志中的操作么?我们现在能够看到有两条来自流程当中的消息被记录到了日志中,这是流程告诉我们它当前已经处理的结果。

19

20

4. 通过日志可以证明这条来自POS系统发出的用来减少存库库存量的消息已经传入到我们的流程当中,现在我们回到数据表中看看产品的数量是按照XML消息中描述的那样,减少了1个商品。

21

5. 我们在用另外一个消息来验证一下,这回传入一个消息,调用SQL存储过程,将仓库表中的商品量增加10个,注意通过刚才第一次的测试,ID为1号的商品数量目前是99个,如果我们这次通过消息增加10个,那么应该是99+10=109个,下面我们来看一下结果吧。

22

23

posted on 2011-04-21 22:10  张大大123  阅读(171)  评论(0编辑  收藏  举报

导航