使用 BizTalk Server 从SQL Server接收基于强类型轮询的数据更改消息

可以将 SQL 适配器配置为接收来自SQL Server的强类型轮询消息。 可以指定适配器为轮询数据库而执行的轮询语句。 轮询语句可以是 SELECT 语句,也可以是返回结果集的存储过程。

在要将轮询消息中的元素映射到任何其他架构的方案中,必须使用强类型轮询。 要映射到的架构可用于SQL Server上的另一个操作。 例如,可以将轮询消息中的某些元素映射到另一个表上的 Insert 操作的架构。 因此,轮询消息中的值充当 Insert 操作的参数。 在更简单的方案中,可以将强类型轮询消息的架构映射到只存储信息的架构文件。

重要

如果要在单个 BizTalk 应用程序中执行多个轮询操作,则必须将 InboundID 连接属性指定为连接 URI 的一部分,使其唯一。 使用唯一的连接 URI,可以创建多个接收端口来轮询同一数据库,甚至是数据库中的同一个表。 有关详细信息,请参阅 使用 Biztalk Server 从 SQL 接收跨多个接收端口的轮询消息

有关适配器如何支持强类型轮询的详细信息,请参阅 支持轮询。 有关强类型轮询的消息架构的详细信息,请参阅 轮询和 TypedPolling 操作的消息架构

本主题如何演示强类型轮询

本主题演示如何使用强类型轮询将轮询消息映射到另一个架构。 本主题演示如何创建 BizTalk 项目并为 TypedPolling 操作生成架构。 在为 TypedPolling 操作生成架构之前,必须执行以下操作:

  • 必须将 InboundID 指定为连接 URI 的一部分。

  • 必须为 PollingStatement 绑定属性指定轮询语句。

    作为轮询语句的一部分,执行以下操作:

  • 从 Employee 表中选择所有行。

  • (MOVE_EMP_DATA) 执行存储过程,将所有记录从 Employee 表移动到 EmployeeHistory 表。

  • 执行存储过程 (ADD_EMP_DETAILS) 向 Employee 表添加新记录。 此过程采用员工姓名、指定和工资作为参数。

    若要执行这些操作,必须为 PollingStatement 绑定属性指定以下内容:

SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000   

由于为 TypedPolling 操作生成架构,因此该架构是强类型,并且包含将包含在轮询消息中的所有元素。

作为同一 BizTalk 项目的一部分,添加另一个架构文件,例如 EmployeeDetails.xsd。 EmployeeDetails.xsd 的架构如下所示:

<?xml version="1.0" encoding="utf-16" ?>   
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://Typed_Polling.EmployeeDetails" elementFormDefault="qualified" targetNamespace="http://Typed_Polling.EmployeeDetails" xmlns:xs="http://www.w3.org/2001/XMLSchema">  
  <xs:element name="EmployeeDetails">  
    <xs:complexType>  
      <xs:sequence>  
        <xs:element name="Employee_Info" type="xs:string" />   
        <xs:element name="Employee_Profile" type="xs:string" />   
        <xs:element name="Employee_Performance" type="xs:string" />   
      </xs:sequence>  
    </xs:complexType>  
  </xs:element>  
</xs:schema>  

还将 BizTalk 映射器添加到项目,以将 Employee 表中 (收到的元素作为轮询消息) 映射到 EmployeeDetails.xsd 架构中的元素。 作为映射的一部分,可以合并轮询消息中的一个或多个元素,并将其映射到 EmployeeDetails 架构中的单个元素。 可以使用 String Concatenate functoid 执行此操作。

最后,作为 BizTalk 项目的一部分,符合 EmployeeDetails.xsd 架构的文件将丢弃到 FILE 发送端口。

使用 SQL 适配器绑定属性配置类型化轮询

下表汇总了用于配置适配器以接收数据更改消息的 SQL 适配器绑定属性。 除了 PollingStatement 绑定属性外,在 BizTalk Server 管理控制台中配置接收端口时,本节中列出的所有其他绑定属性是必需的。 在为 TypedPolling 操作生成架构之前,必须指定 PollingStatement 绑定属性。

注意

对于类型化轮询,必须在生成架构时指定 PollingStatement 出价属性。 还可以选择在生成架构时指定其他绑定属性,即使它们不是必需的。 如果指定了绑定属性,则使用适配器服务外接程序在元数据生成过程中生成的端口绑定文件也会包含为绑定属性指定的值。 稍后可以在 BizTalk Server 管理控制台中导入此绑定文件,以使用已设置的绑定属性创建 WCF-custom 或 WCF-SQL 接收端口。 有关使用绑定文件创建端口的详细信息,请参阅 使用端口绑定文件配置物理端口绑定以使用 SQL 适配器

Binding 属性 说明
InboundOperationType 指定是要执行 轮询TypedPolling 还是 通知 入站操作。 默认值为 轮询。 若要接收强类型轮询消息,请将此项设置为 TypedPolling
PolledDataAvailableStatement 指定适配器执行的 SQL 语句,以确定是否有任何数据可用于轮询。 SQL 语句必须返回由行和列组成的结果集。 仅当行可用时,才会执行为 PollingStatement 绑定属性指定的 SQL 语句。
PollingIntervalInSeconds 指定 SQL 适配器执行为 PolledDataAvailableStatement 绑定属性指定的语句的时间间隔(以秒为单位)。 默认为 30 秒。 轮询间隔确定连续轮询之间的时间间隔。 如果在指定的时间间隔内执行语句,适配器将等待间隔中的剩余时间。
PollingStatement 指定用于轮询SQL Server数据库表的 SQL 语句。 可以为轮询语句指定简单的 SELECT 语句或存储过程。 默认值为 NULL。 必须指定 PollingStatement 的值才能启用轮询。 仅当有可供轮询的数据(由 PolledDataAvailableStatement 绑定属性确定)时,才会执行轮询语句。 可以指定任意数量的用分号分隔的 SQL 语句。

重要: 对于 TypedPolling,必须在生成元数据之前指定此绑定属性。
PollWhileDataFound 指定 SQL 适配器是否忽略轮询间隔并持续执行为 PolledDataAvailableStatement 绑定属性指定的 SQL 语句(如果数据在要轮询的表中可用)。 如果表中没有可用数据,适配器将还原为按指定的轮询间隔执行 SQL 语句。 默认值为 false

有关这些属性的更完整说明,请参阅阅读适用于 SQL Server 适配器绑定属性的 BizTalk 适配器。 有关如何使用 SQL 适配器轮询SQL Server的完整说明,请进一步阅读。

如何从SQL Server数据库接收强类型数据更改消息

使用带BizTalk Server的 SQL 适配器对 SQL Server 数据库执行操作涉及构建基块以使用 SQL 适配器开发 BizTalk 应用程序中所述的过程性任务。 若要将适配器配置为接收强类型数据更改消息,这些任务包括:

  1. 创建 BizTalk 项目,然后生成 TypedPolling 操作的架构。 生成架构时,必须指定 InboundID 连接属性和 PollingStatement 绑定属性。 例如,指定了入站 ID 的连接 URI 如下所示:

    mssql://mysqlserver//mysqldatabase?InboundID=mydatabaseId  
    
  2. 在 BizTalk 项目中创建一条消息,用于从 SQL Server 数据库接收消息。

  3. 创建业务流程以从SQL Server数据库接收消息并将其保存到文件夹中。

  4. 在 BizTalk 项目中添加架构,例如 EmployeeDetails.xsd。

  5. 添加 BizTalk 映射器,将轮询消息的架构映射到 EmployeeDetails.xsd 架构。

  6. 生成并部署 BizTalk 项目。

  7. 通过创建物理发送和接收端口配置 BizTalk 应用程序。

    重要

    对于入站轮询方案,必须始终配置单向 WCF-Custom 或 WCF-SQL 接收端口。 入站操作不支持双向 WCF-Custom 或 WCF-SQL 接收端口。

  8. 启动 BizTalk 应用程序。

    本主题提供有关执行这些任务的说明。

基于本主题的示例

BizTalk 适配器包提供了基于本主题的示例 TypedPolling。 有关详细信息,请参阅 SQL 适配器的示例

生成架构

必须为 TypedPolling 操作生成架构。 有关如何生成架构的详细信息,请参阅使用 SQL 适配器在 Visual Studio 中检索SQL Server操作的元数据。 生成架构时执行以下任务。

  1. 指定连接 URI 时指定 InboundID 连接属性。 对于本主题,可以将 InboundID 指定为 Employee。 有关连接 URI 的详细信息,请参阅创建SQL Server连接 URI

  2. 指定 PollingStatement 绑定属性的值。 有关此绑定属性的详细信息,请参阅阅读有关 BizTalk Adapter for SQL Server 适配器绑定属性的信息。

    有关如何指定绑定属性的说明,请参阅 配置 SQL 适配器的绑定属性

  3. 选择协定类型作为 “服务” (“入站”操作)

  4. TypedPolling 操作生成架构。

定义消息和消息类型

前面生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 生成架构后,必须将其链接到 BizTalk 项目的业务流程视图中的消息。

对于本主题,必须创建一条消息才能从SQL Server数据库接收消息。

执行以下步骤以创建消息并将其链接到架构。

  1. 将业务流程添加到 BizTalk 项目。 在解决方案资源管理器中,右键单击 BizTalk 项目名称,指向“添加”,然后单击“新建项”。 键入 BizTalk 业务流程的名称,然后单击“ 添加”。

  2. 打开 BizTalk 项目的业务流程视图窗口(如果尚未打开)。 单击“ 视图”,指向“ 其他窗口”,然后单击“ 业务流程视图”。

  3. 业务流程视图中,右键单击“ 消息”,然后单击“ 新建消息”。

  4. 右键单击新创建的消息,然后选择“ 属性窗口”。

  5. Message_1的“属性”窗格中,执行以下操作:

    使用此选项 要执行此操作
    标识符 键入 PollingMessage
    消息类型 从下拉列表中,展开“ 架构”,然后选择 “Typed_Polling.TypedPolling_Employee.TypedPolling”,其中 “Typed_Polling ”是 BizTalk 项目的名称。 TypedPolling_Employee 是为 TypedPolling 操作生成的架构。

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 SQL Server 数据库接收基于轮询的数据更改消息。 在此业务流程中,适配器接收指定轮询语句的轮询消息。 然后,BizTalk 映射器将轮询消息架构映射到 EmployeeDetails.xsd 架构。 然后将映射的消息保存到文件位置。 用于从SQL Server数据库接收强类型轮询消息的典型业务流程将包含:

  • 接收和发送形状以接收来自SQL Server的消息,并分别发送到文件端口。

  • 用于从SQL Server接收消息的单向接收端口。

    重要

    对于入站轮询方案,必须始终配置单向接收端口。 入站操作不支持双向接收端口。

  • 单向发送端口,用于将轮询响应从SQL Server数据库发送到文件夹。

  • BizTalk 映射器,用于将轮询消息的架构映射到任何其他架构。

    示例业务流程类似于以下内容。

    强类型轮询的业务流程

添加消息形状

请确保为每个消息形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。

形状 形状类型 属性
ReceiveMessage 接收 - 将 Name 设置为 ReceiveMessage

- 将 “激活” 设置为 “True”
SaveMessage 发送 - 将 “名称 ”设置为 SaveMessage

添加端口

请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。

端口 属性
SQLReceivePort - 将 标识符 设置为 SQLReceivePort

- 将 Type 设置为 SQLReceivePortType

- 将 通信模式 设置为 单向

- 将 通信方向 设置为 接收
SaveMessagePort - 将 标识符 设置为 SaveMessagePort

- 将 Type 设置为 SaveMessagePortType

- 将 通信模式 设置为 单向

- 将“通信方向”设置为“发送

输入操作形状的消息并连接到端口

下表指定应设置的属性及其值,以便为操作形状指定消息并将消息链接到端口。 Shape 列中列出的名称是前面提到的业务流程中显示的消息形状的名称。

形状 属性
ReceiveMessage Message 设置为 PollingMessage

操作 设置为 SQLReceivePort.TypedPolling.Request
SaveMessage Message 设置为 PollingMessage

操作 设置为 SaveMessagePort.TypedPolling.Request

指定这些属性后,将连接消息形状和端口。

添加 BizTalk 映射器

必须将 BizTalk 映射器添加到业务流程,才能将轮询消息架构映射到 EmployeeDetails.xsd 架构。 在BizTalk Server管理控制台中,你将使用此映射器将轮询消息的架构映射到 EmployeeDetails.xsd 架构。

  1. 将 BizTalk 映射器添加到 BizTalk 项目。 右键单击 BizTalk 项目,指向 “添加”,然后单击“ 新建项”。

    在“ 添加新项 ”对话框中的左窗格中,选择“ 映射文件”。 在右窗格中,选择“ 映射”。 指定映射的名称,例如 MapSchema.btm。 单击“添加”。

  2. 在“源架构”窗格中,单击“ 开放源代码架构”。

  3. “BizTalk 类型选取器 ”对话框中,展开项目名称,展开 “架构”,然后选择轮询消息的架构。 对于本主题,请选择“Typed_Polling.TypedPolling_Employee”。 单击 “确定”

  4. 在“ 源架构的根节点 ”对话框中,选择“TypedPolling”,然后单击“ 确定”。

  5. 在“目标架构”窗格中,单击“ 打开目标架构”。

  6. “BizTalk 类型选取器 ”对话框中,展开项目名称,展开 “架构”,然后选择 EmployeeDetails 的架构。 对于本主题,请选择“Typed_Polling.EmployeeDetails”。 单击 “确定”

  7. 在轮询消息的源架构中,展开 TypedPollingResultSet0 节点和后续节点以查看轮询消息中返回的元素。 在目标架构中,展开 EmployeeDetails 节点以查看架构中的不同元素。 对于本主题,必须以以下方式映射架构:

    • 架构中的Employee_ID和 名称 必须映射到目标架构中的 Employee_Info

    • 源架构中的指定Job_Description必须映射到目标架构中的Employee_Profile

    • 源架构中的评级薪水必须映射到目标架构中的Employee_Performance

      若要合并源架构中的多个节点并将其映射到目标架构中的单个节点,必须使用 String Concatenate functoidUI 指南和开发人员 API 命名空间参考中的详细信息。

  8. 若要使用 String Concatenate functoid,

    1. “工具箱”中,拖动 “字符串连接 ”functoid 并将其拖放到“映射器”网格上。

    2. 将源架构中的 Employee_IDName 元素连接到 functoid。

    3. 将 functoid 连接到目标架构中的 Employee_Info 元素。

    4. 对要映射的所有元素重复这些步骤。 完成的地图将如下所示:

      映射强类型轮询架构

    5. 保存该映射。

    创建映射器后,业务流程已完成。 现在必须生成 BizTalk 解决方案并将其部署到BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程

配置 BizTalk 应用程序

部署 BizTalk 项目后,前面创建的业务流程将列在 BizTalk Server 管理控制台的“业务流程”窗格中。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关演练,请参阅 演练:部署基本 BizTalk 应用程序

配置应用程序涉及:

  • 为应用程序选择主机。

  • 将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此业务流程,必须:

    • 定义物理 WCF-Custom 或 WCF-SQL 单向接收端口。 此端口使用为端口指定的轮询语句轮询SQL Server数据库。 有关如何创建端口的信息,请参阅 手动配置到 SQL 适配器的物理端口绑定。 请确保为接收端口指定以下绑定属性。

      重要

      请确保将 InboundID 指定为连接 URI 的一部分。 入站 ID 必须与生成架构时指定的 ID 相同。

      重要

      如果在设计时指定了绑定属性,则不需要执行此步骤。 在这种情况下,可以通过导入由使用适配器服务外接程序创建的绑定文件,创建 WCF-custom 或 WCF-SQL 接收端口,并设置所需的绑定属性。 有关详细信息 ,请参阅使用端口绑定文件配置物理端口绑定以使用 SQL 适配器

      Binding 属性
      InboundOperationType 请确保将此设置为 TypedPolling
      PolledDataAvailableStatement 请确保在生成架构时指定相同的 SQL 语句,即:

      SELECT COUNT(*) FROM Employee
      PollingStatement 请确保提供在生成架构时指定的相同轮询语句,即:

      SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000

      有关不同绑定属性的详细信息,请参阅了解适用于 SQL Server 适配器绑定属性的 BizTalk 适配器

      注意

      建议在使用 SQL 适配器执行入站操作时配置事务隔离级别和事务超时。 为此,可以在配置 WCF-Custom 或 WCF-SQL 接收端口时添加服务行为。 有关如何添加服务行为的说明,请参阅 使用 SQL 配置事务隔离级别和事务超时

    • 定义适配器将删除消息的 FILE 发送端口。 此发送端口还将使用在业务流程中创建的映射将轮询消息映射到符合 EmployeeDetails.xsd 架构的消息。 执行以下步骤,将 FILE 发送端口配置为使用映射。

      1. 创建文件发送端口。

      2. 在“发送端口属性”对话框的左窗格中,单击“ 出站映射”。 在右窗格中,单击“ 地图 ”列下的字段,然后从下拉列表中选择“ MapSchema”。 单击 “确定”

        在文件发送端口 上配置出站映射

启动应用程序

必须启动 BizTalk 应用程序,以便从 SQL Server 数据库接收消息。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程

在此阶段,请确保:

  • WCF-Custom 或 WCF-SQL 单向接收端口正在运行,该端口使用为 PollingStatement 绑定属性指定的语句轮询SQL Server数据库。

  • FILE 发送端口正在运行,它将轮询消息映射到 EmployeeDetails 架构。

  • 操作的 BizTalk 业务流程正在运行。

执行操作

运行应用程序后,将按相同的顺序执行以下一组操作:

  • 适配器对 Employee 表执行 PolledDataAvailableStatement ,并确定该表具有用于轮询的记录。

  • 适配器执行轮询语句。 由于轮询语句由 SELECT 语句和存储过程组成,因此适配器将逐个执行所有语句。

    • 适配器首先执行 SELECT 语句,该语句返回 Employee 表中的所有记录。

    • 然后,适配器执行MOVE_EMP_DATA存储过程,将所有数据从 Employee 表移动到 EmployeeHistory 表。 此存储过程不返回任何值。

    • 然后,适配器执行ADD_EMP_DETAILS存储过程,该存储过程将一条记录添加到 Employee 表。 此存储过程返回插入的记录的员工 ID。

      执行轮询语句并收到消息后,轮询消息将发送到 FILE 发送端口。 此处,发送端口上配置的出站映射 (MapSchema) 将轮询消息映射到 EmployeeDetails 架构,并将消息拖放到文件位置。 消息如下所示:

    <?xml version="1.0" encoding="utf-8" ?>   
    <EmployeeDetails xmlns="http://Typed_Polling.EmployeeDetails">  
      <Employee_Info>10751John</Employee_Info>   
      <Employee_Profile>TesterManagesTesting</Employee_Profile>   
      <Employee_Performance>100000</EmployeePerformance>  
    </EmployeeDetails>  
    

    在前面的响应中,可以注意到,Employee_Info 元素包含员工 ID (10751) 和员工姓名 (John) 。 其他元素还包含作为业务流程的一部分创建的映射器中映射的组合。

注意

SQL 适配器将继续轮询,直到从 BizTalk Server 管理控制台显式禁用接收端口。

最佳实践

部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建发送端口和接收端口。 有关绑定文件的详细信息,请参阅 重用适配器绑定

另请参阅

将 SQL 适配器与 BizTalk Server 配合使用来轮询SQL Server