通过 BizTalk Server 使用 SQL 的 SELECT 语句和 FOR XML 子句接收轮询消息

可以使用包含 FOR XML 子句的 SELECT 语句或存储过程将 SQL 适配器配置为接收 SQL Server 表或视图的定期数据更改消息。 您可以将这些语句指定为适配器用来对数据库进行轮询的语句。 轮询语句可以是 SELECT 语句或返回结果集的存储过程。

有关适配器如何支持轮询的详细信息,请参阅 对轮询的支持。 有关轮询操作的 SOAP 消息结构信息,请参阅 轮询和 TypedPolling 操作的消息架构。 SQL FOR XML 子句 提供了更多详细信息。

注释

本主题演示如何使用 XmlPolling 入站操作来接收轮询消息。 XmlPolling作用于使用 SELECT 语句或包含 FOR XML 子句的存储过程轮询 SQL Server 数据库。 XmlPolling操作的消息包括通过执行 SQL Server Management Studio 中的 SELECT 语句或存储过程收到的 xml 消息。

还可以使用适配器接收不同类型的轮询消息。

重要

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

本主题如何演示轮询

在本主题中,为了演示 SQL 适配器如何支持接收数据更改消息,我们使用具有 FOR XML 子句的 SELECT 语句来轮询 SQL Server 数据库。 在 SQL Server Management Studio 中调用此类语句时,输出采用 xml 消息的形式。 若要使用此类语句轮询 SQL Server 数据库,必须具有响应 xml 消息的架构。 SQL 适配器要求此架构在执行具有 FOR XML 子句的 SELECT 语句后接收轮询消息。 因此,若要将 SELECT 语句与 FOR XML 子句一起使用来轮询 SQL Server 数据库,必须执行以下一组任务。

  1. 使用 FOR XML 子句为 SELECT 语句生成 XML 响应消息的架构。

  2. 创建 BizTalk 项目,并将生成的架构添加到项目中。

  3. 在 BizTalk 项目中创建一条消息,用于从 SQL Server 数据库接收 XML 响应消息。

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

  5. 生成和部署 BizTalk 项目。

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

    重要

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

  7. 启动 BizTalk 应用程序。

为 SELECT 语句的响应消息生成模式

可以通过包含 `xmlschema` 子句和 `for xml` 子句,为 SELECT 语句生成响应消息的架构。 在本主题中,我们使用 SELECT 语句检索给定员工 ID 的员工详细信息。 若要通过执行 SELECT 语句来检索架构,必须采用以下方式编写 SELECT 语句:

SELECT Employee_ID ,Name ,Designation FROM Employee for xml auto, xmlschema

执行此 SELECT 语句以获取响应消息的架构。 保存该架构。 现在必须在 Visual Studio 中创建 BizTalk 项目,并将此架构添加到项目中。 对于此示例,可以将此架构命名为 PollingResponse.xsd

重要

在执行 SELECT 语句以生成架构后,请确保删除 xmlschema 该子句。 如果未能完成此操作,最终作为 XmlPolling 操作的一部分,通过 BizTalk 执行 SELECT 语句时,您将在响应消息中再次生成架构定义。 因此,若要将响应消息作为 xml 获取,必须删除该 xmlschema 子句。

将架构添加到 BizTalk 项目

  1. 在 Visual Studio 中创建 BizTalk 项目。

  2. 将为存储过程生成的响应架构添加到 BizTalk 项目。 右键单击解决方案资源管理器中的 BizTalk 项目,指向 “添加”,然后单击“ 现有项”。 在“添加现有项”对话框中,导航到保存架构的位置,然后单击“ 添加”。

  3. 在 Visual Studio 中打开架构并进行以下更改。

    1. 将节点添加到架构,并将现有根节点移到此新添加的节点下。 为根节点命名。 对于本主题,请将根节点重命名为 Root

    2. 为 SELECT 语句生成的响应架构引用 sqltypes.xsd。 可以从https://go.microsoft.com/fwlink/?linkid=31850获取 sqltypes.xsd 架构。 将 sqltypes.xsd 架构添加到 BizTalk 项目。 有关此架构的详细信息,请转到:

    3. 在为 SELECT 语句生成的架构中,将值 import schemaLocation 更改为以下内容。

      import schemaLocation=”sqltypes.xsd”
      

      这样做是因为已将 sqltypes.xsd 架构添加到 BizTalk 项目。

    4. 为架构提供目标命名空间。 <单击“架构>”节点,然后在“属性”窗格中指定目标命名空间属性中的命名空间。 对于本主题,请为命名空间指定为 http://ForXmlPolling/namespace.

定义消息和消息类型

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

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

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

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

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

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

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

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

    用这个 要执行的操作
    标识符 键入 PollingMessage
    消息类型 在下拉列表中,展开 “架构”,然后选择 “ForXMLPolling.PollingResponse”,其中 ForXMLPolling 是 BizTalk 项目的名称。 PollingResponse 是通过执行 SELECT 语句生成的响应架构的名称,如“使用 BizTalk Server 从 SQL 中利用 FOR XML 子句的 SELECT 语句接收轮询消息”中所述。

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 SQL Server 数据库接收基于轮询的数据更改消息。 在此业务流程中,适配器接收 为 PollingStatement 绑定属性指定的 select 语句的响应。 SELECT 语句的响应将保存到 FILE 位置。 用于轮询 SQL Server 数据库的典型业务流程将包含:

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

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

    重要

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

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

    示例编排如下所示。

    轮询 SQL Server 数据库的编排

添加消息形状

请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是消息形状的名称,如上述编排中所显示。

形状 形状类型 性能
接收消息 接收 - 将 名称 设置为 ReceiveMessage

- 将 “激活 ”设置为 True
保存消息 发送 - 将 名称 设置为 SaveMessage

添加端口

请确保为每个逻辑端口指定以下属性。 端口列中列出的名称是在编排中显示的端口的名称。

港口 性能
SQL 接收端口 - 将 标识符 设置为 SQLReceivePort

- 将 类型 设置为 SQLReceivePortType

- 将 通信模式 设置为 单向

- 将通信方向设置为接收
保存消息端口 - 将 标识符 设置为 SaveMessagePort

- 将 类型 设置为 SaveMessagePortType

- 将 通信模式 设置为 单向

- 将通信方向设置为发送

为动作形状指定消息并连接至端口

下表列出了为操作形状指定消息及将消息链接到端口时需要设置的属性及其值。 Shape 列中列出的名称是前文提到的业务编排中显示的消息形状的名称。

形状 性能
接收消息 - 将 消息 设置为 接收

- 将 操作 设置为 SQLReceivePort.XmlPolling.Request
保存消息 - 将 消息 设置为 接收

- 将 操作 设置为 SaveMessagePort.XmlPolling.Request

指定这些属性后,消息形状符和端口被连接,您的编排已完成。

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

配置 BizTalk 应用程序

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

配置应用程序涉及:

  • 为应用程序选择主机。

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

    • 定义硬盘上的位置和相应的文件端口,BizTalk 业务流程将从 SQL Server 数据库中删除消息。 这些消息将响应您为接收端口指定的轮询语句。

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

      重要

      如果在设计时指定绑定属性,则无需执行此步骤。 在这种情况下,通过导入由“Consume Adapter Service Add-in”创建的绑定文件,可以设置所需的绑定属性,来创建 WCF 自定义或 WCF-SQL 接收端口。 有关详细信息,请参阅 使用端口绑定文件配置物理端口绑定以使用 SQL 适配器

      Binding 属性 价值
      InboundOperationType 请确保将此设置为 XmlPolling
      数据可用性声明 请确保指定 SQL 语句。 对于本主题,请指定:

      SELECT COUNT(*) FROM Employee
      PollingStatement 请确保您提供的是在生成架构时指定的相同语句,但不包含xmlschema子句,如使用 BizTalk Server 从 SQL 中使用 SELECT 语句和 FOR XML 子句接收轮询消息中所述。

      SELECT Employee_ID ,Name ,Designation FROM Employee for xml auto

      注意: 请注意,SELECT 语句不包含子 xmlschema 句。
      XmlStoredProcedureRootNodeName 指定添加到为 SELECT 语句生成的响应架构的根节点的名称,如 SELECT 语句的“响应消息生成架构”下所述。 对于本主题,请将此项设置为 Root
      Xml存储过程根节点命名空间 为 SELECT 语句生成的响应架构指定目标命名空间,如 SELECT 语句的响应消息的生成架构中所述。 对于本主题,请将此设置为 http://ForXmlPolling/namespace.

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

      注释

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

启动应用程序

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

在此阶段,请确保:

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

  • 从 SQL Server 接收消息的 FILE 发送端口正在运行。

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

执行操作

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

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

  • 适配器执行轮询语句,并从 SQL Server 数据库接收轮询消息。 由于轮询语句由具有 FOR XML 子句的 SELECT 语句组成,适配器收到的轮询消息如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
    <Root xmlns="http://ForXmlPolling/namespace">
      <Employee Employee_ID="10765" Name="John" Designation="Tester" xmlns="" />
      <Employee Employee_ID="10766" Name="Sam" Designation="Manager" xmlns="" />
      .....
      .....
    </Root>
    

    请注意,轮询消息是以执行 SELECT 语句并使用 xmlschema 子句生成架构的方式接收到的。 另请注意,根节点和命名空间与分别指定为 XmlStoredProcedureRootNodeNameXmlStoredProcedureRootNodeNamespace 绑定属性的值相同。

注释

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

最佳做法

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

另请参阅

在 BizTalk Server 中使用 SQL 适配器轮询 SQL Server