事务性适配器(BizTalk Server 示例)

事务性适配器示例演示如何在处理 BizTalk Server 消息期间,根据数据库创建并使用显式 Microsoft 分布式事务处理协调器 (MSDTC) 事务。

本示例的用途

此示例包含一个接收适配器,该适配器以用户指定的间隔运行 SQL 语句,使用 MSDTC 事务从 SQL Server 数据库中获取数据。 然后,以同一事务上下文中的消息的形式将数据提交给 BizTalk Server MessageBox 数据库。

相应的发送适配器使用来自事务上下文中 BizTalk 消息的输入运行用户指定的 SQL 存储过程。 它使用来自该消息中的特定数据,找到并删除同一事务中 MessageBox 数据库中对应的消息。

此示例的设计方式和原因

此示例在其解决方案中有两个项目。 第一个是在运行前使用的管理项目 (Admin),以允许用户配置使用此适配器的接收位置和发送端口。 第二个是在发送和接收适配器正在执行时运行的运行时项目 (Runtime)。

本示例所在的位置

本示例位于以下 SDK 位置中:

<示例路径>\Samples\AdaptersDevelopment\TransactionalAdapter。 管理配置项目位于 \Admin 文件夹中,而运行时项目位于 \Runtime 文件夹中。

下表显示了本示例中的文件及其用途说明:

Admin 项目文件名 Admin 项目文件说明
TransactionalAdmin.csproj 用于进行运行时预配置的适配器管理项目文件
TransactionalReceiveHandler.xsd 接收处理程序属性的 XSD
TransactionalReceiveLocation.xsd 接收位置属性的 XSD
TransactionalTransmitLocation.xsd 传输位置属性的 XSD
TransactionalTransmitHandler.xsd 传输处理程序属性的 XSD
TransactionalAdapterManagement.cs 适配器配置管理。 包含 GetConfigSchema,BizTalk 适配器框架调用 GetConfigSchema 以返回它所支持的每种(四种)可能配置类型的 XSD 配置架构。
Runtime 项目文件名 Runtime 项目文件说明
Transactional.csproj 适配器运行时项目文件
TransactionalAsyncBatch.cs 适配器发送部分的异步实现
TransactionalDeleteBatch.cs 删除一批消息和投票,以提交或中止事务
TransactionalProperties.cs 提取和设置配置属性
TransactionalReceiver.cs 创建和管理接收终结点
TransactionalReceiverEndpoint.cs 每个接收位置的实际监听或轮询
TransactionalTransmitter.cs 从消息引擎接受要传输的一批消息

如何使用本示例

本示例可以作为你使用显式事务创建自定义发送和接收适配器的框架。

生成和初始化此示例

重要

如果是在 64 位计算机上安装 BizTalk 或安装位置已修改,则需要相应修改 OutboundAssemblyPath、InboundAssemblyPath、AdapterMgmtAssemblyPath。

为事务适配器示例创建强名称密钥

  1. 启动 Visual Studio 命令提示符

  2. 在命令提示符下,键入以下命令,然后按 Enter:

    cd \Program Files\Microsoft BizTalk Server <version>\SDK\Samples\AdaptersDevelopment\TransactionalAdapter\Runtime  
    
  3. 在命令提示符下,键入以下命令,然后按 Enter:

    sn –k TransactionalAdapter.snk  
    
  4. 在命令提示符下,键入 exit,然后按 Enter 关闭命令提示符窗口。

生成事务适配器解决方案

  1. 单击“ 开始”,指向 “所有程序”,指向“ 附件”,然后单击“ Windows 资源管理器”。

  2. 浏览到 \Program Files (x86) \Microsoft BizTalk Server <VERSION>SDK\Samples\AdaptersDevelopment\TransactionalAdapter,然后双击 TransactionalAdapter.sln 在 Visual Studio 中打开此解决方案。

  3. 若要在 解决方案资源管理器 中生成事务适配器项目 (管理员 和运行时) ,请右键单击“Solution TransactionalAdapter”,然后单击“重新生成”。

运行本示例

注册事务适配器

  1. 在 Windows 资源管理器中,导航到 \Program Files (x86) \Microsoft BizTalk Server <VERSION>SDK\Samples\AdaptersDevelopment\TransactionalAdapter\管理员。

  2. 若要将事务适配器数据添加到注册表,请双击“ TransactionalAdmin.reg”。

    注意

    TransactionalAdmin.reg 包括 C:\Program Files\Microsoft BizTalk Server\ 的硬编码路径。 如果未在默认位置安装 BizTalk Server,或者从以前的版本升级了BizTalk Server安装,则必须使用适当的路径修改文件 TransactionalAdmin.reg。 更新与揑“InboundAssemblyPath”、揙“OutboundAssemblyPath”和揂“AdapterMgmtAssemblyPath”值相关联的路径,以指向指定文件的正确位置。

    重要

    如果在 64 位计算机上安装 BizTalk,请将 HKEY_CLASSES_ROOT\CLSID\ 注册表项的所有实例更改为 在 TransactionalAdmin.reg 注册表文件中 HKEY_CLASSES_ROOT\Wow6432Node\CLSID\。

  3. “注册表编辑器 ”对话框中,单击“ ”将示例适配器添加到注册表,然后单击“ 确定”。

  4. 若要关闭 Windows 资源管理器,请单击“ 文件”,然后单击“ 关闭”。

将事务性适配器添加到 BizTalk Server

  1. 单击“开始”菜单,依次选择“所有程序”、“Microsoft BizTalk Server 20xx”、“BizTalk Server管理”。

  2. 在“BizTalk Server管理”中,展开“BizTalk Server管理”树,展开“BizTalk 组”树,然后展开“平台设置”树。

  3. 右键单击“ 适配器”,单击“ 新建”,然后单击“ 适配器”。

  4. 在“ 适配器属性 ”对话框中,执行以下操作。

    使用此选项 要执行此操作
    名称 键入 TransactionalAdapter
    适配器 从下拉列表中选择 “Txn ”。 此项显示为之前运行 TransactionalAdmin.reg 文件的结果。
    说明 类型 示例事务适配器
  5. 单击“ 确定 ”。适配器现在显示在 BizTalk 管理控制台右侧窗口的适配器列表中。

创建使用该适配器的接收端口和位置

  1. 在“BizTalk Server管理”中展开“BizTalk 组[服务器名称]”节点,依次展开“应用程序”节点和“BizTalk 应用程序 1”节点。

  2. 右键单击“ 接收端口”,然后单击“ 新建”,选择“ 单向接收端口”。

  3. 对于 “名称”,输入 TxnReceivePort1,然后单击“ 确定”。

  4. 右键单击“ 接收位置” 节点,单击“ 新建”,然后选择“ 单向接收位置”。

  5. “选择接收端口 ”对话框中,选择“ TxnReceivePort1”,然后单击“ 确定”。

  6. 在“接收位置属性”对话框中的“常规”选项卡下,输入“TxnReceiveLocation1”为“名称”。 确保 “接收端口” 标签显示 TxnReceivePort1

  7. “类型 ”下拉列表框中的“ 传输 帧”中,选择“ TransactionalAdapter”。

  8. “接收管道 ”框中,确保选中“ PassThruReceive ”。 将其他属性保留为默认设置。

  9. 单击“类型”下拉框旁边的“配置”按钮。 这会显示特定于此适配器的对话框。 根据需要指定以下内容,然后单击“ 确定”。

    属性 设置
    连接字符串 用于连接 Northwind 数据库并进行身份验证的 SQL 数据库连接字符串。 我们随后运行的 SQL 脚本将使用此数据库。
    命令文本 针对 Northwind 数据库执行的 SQL 语句,目的是获取要输入到 BizTalk 消息中的数据。
    Cookie 包括部分 URI,因此请输入唯一的值,如接收位置的名称,例如:TxnReceiveLocation1。
    轮询间隔单位 轮询数据的时间单位。 设置为秒。
    轮询间隔 轮询数据的时间度量单位。 设置为 15 秒。
  10. 单击“确定”关闭“配置”对话框,然后再次单击“确定”关闭“接收位置属性”对话框以返回到“BizTalk Server管理”。

创建使用此适配器的发送端口和发送处理程序

  1. BizTalk 应用程序 1 节点仍展开的情况下,右键单击“ 发送端口”,然后单击“ 新建”,然后选择“ 静态 One-Way 发送端口”。

  2. “名称” 字段中,输入 TxnSendPort1

  3. 传输帧的“类型”下拉列表中,选择“事务”“Adapter.

  4. 在“ 发送管道 ”框中,确保选中“ PassThruTransmit ”。

  5. 单击传输下拉列表旁边的“配置”按钮。在出现的对话框中,根据需要指定以下内容,然后单击“确定”。

    属性 设置
    Cookie 包含 URI 的一部分 - 在此处输入唯一值,例如接收位置的名称,例如: TxnSendPort1
    连接字符串 用于连接 Northwind 数据库并进行身份验证的 SQL 数据库连接字符串。 它很可能是用于配置 TxnReceiveLocation1 接收位置的相同位置。
    存储过程 执行以轮询数据库的存储过程名称 - sp_txnProc。 BizTalk 消息的正文作为名为 的 @Data字符串参数提供给该存储过程。 例如,在这种情况下,用户稍后将使用名称 sp_txnProc配置存储过程。 该适配器在运行时将对数据库执行等效的这种调用。

    exec sp_txnProc @Data = “BizTalk 消息的内容”
  6. 在左侧导航窗格中,单击“ 筛选”。

  7. 在筛选器表达式编辑器中,输入以下表达式以便设置针对此发送端口的订阅,接收由 TxnReceivePort1 接收端口接收到的任何消息。

    输入以下值:BTS。ReceivePortName== TxnReceivePort1

    1. (property)Bts。ReceivePortName

    2. (operator) ==

    3. (value)TxnReceivePort1

  8. 对适配器属性的其余部分使用默认值,然后选择“ 确定”。

运行示例

  1. 单击“开始”,指向“所有程序”,指向“Microsoft SQL Server 2008 R2”,选择“SQL Server Management Studio”。

  2. 在“ 连接到服务器 ”对话框中,确保“ 服务器类型 ”设置为 “数据库引擎”,并输入凭据以对数据库服务器进行身份验证,然后选择“ 连接”。

  3. 选择“ 新建查询 ”工具栏按钮,将以下内容粘贴到新查询窗口中,以将测试表、测试数据和测试存储过程插入 Northwind 数据库。 选择“ 执行 工具栏”按钮。

    use [Northwind]  
    GO  
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[scratch]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)  
    drop table [dbo].[scratch]  
    GO  
    CREATE TABLE [dbo].[scratch] (  
         [id] [int] IDENTITY (1, 1) NOT NULL ,  
         [msg] [nvarchar] (4000) NOT NULL   
    ) ON [PRIMARY]  
    GO  
    GRANT SELECT , UPDATE , INSERT ON [dbo].[scratch] TO [public]  
    GO  
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_txnProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)  
    drop procedure [dbo].[sp_txnProc]  
    GO  
    CREATE PROCEDURE [dbo].[sp_txnProc] @Data nvarchar (4000)  
    AS   
    INSERT scratch ( msg ) values ( @Data )  
    GO  
    GRANT EXECUTE ON [dbo].[sp_txnProc] TO [public]  
    GO  
    
  4. 在“BizTalk Server管理”中,展开“发送端口”节点,选择 TxnSendPort1 发送端口,然后选择“启动”。

  5. 在“BizTalk Server管理”中,展开 ReceiveLocations 节点,选择 TxnReceiveLocation1 接收位置,然后选择“启用”。

  6. 在启用该接收位置后,它将在指定的时间间隔自动轮询数据库以获得数据。

示例中使用的类或方法

  • IBTTransmitterBatch 接口 (COM)

  • IBTTransportProxy 接口 (COM)

UI 指南和开发人员 API 命名空间参考中介绍了这些方法。

另请参阅

适配器示例 - 开发
注册适配器