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

Microsoft BizTalk Adapter for SQL Server 使适配器客户端能够从SQL Server数据库接收数据更改消息。 SQL 适配器支持接收“基于轮询的”消息,其中适配器执行指定的 SQL 语句 (SELECT 语句或存储过程) ,检索或更新数据,并定期向适配器客户端提供结果。

SQL 适配器公开以下轮询操作:

  • 轮询:使你能够接收SQL Server表或视图的定期数据更改消息。 消息不是强类型。

  • TypedPolling:使你能够接收来自 SQL Server 数据库的强类型消息。 如果要将轮询消息中的元素映射到任何其他架构,则必须使用此操作。

  • XmlPolling。 使你能够使用使用 FOR XML 子句的 SELECT 语句或存储过程,并将数据作为 XML 消息返回。 此操作将轮询消息作为 XML 消息返回。

    有关 FOR XML 子句的详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=131402

    有关在 SQL 适配器中轮询的详细信息,请参阅使用 BizTalk Server 从SQL Server接收基于轮询的数据更改消息

轮询

使用 SQL 适配器的典型轮询操作涉及以下内容:

  1. 适配器客户端必须在 InboundOperationType 绑定属性中指定Polling为入站操作。 此绑定属性的默认值为 Polling

  2. 适配器客户端必须为 PolledDataAvailableStatement 绑定属性指定一个 SQL 语句,该语句确定是否有可用于轮询的数据。 执行此语句时返回的第一个结果集的第一行的第一列包含整数值。 如果没有可用于轮询的数据,则返回值为 0 (零) 。 如果有可用数据,则返回值大于零。

  3. 适配器客户端必须为 PollingIntervalInSeconds 绑定属性指定轮询间隔,以定义 PolledDataAvailableStatement 绑定属性中的语句的执行间隔。 在每个轮询间隔结束时,将执行轮询的数据可用语句,并返回结果集。

  4. 适配器客户端必须指定轮询 SQL 语句 (SELECT 语句或存储过程) PollingStatement 绑定属性。 如果有数据可用于轮询 (由 PolledDataAvailableStatement 绑定属性) 确定,则适配器将执行轮询语句,以获取并更新 ((如果适用),) SQL Server数据库中的数据。 当 SQL 适配器与 BizTalk Server 一起使用时,也使用相同的事务将消息提交到BizTalk Server。

  5. 适配器客户端可以使用 PollWhileDataFound 绑定属性来忽略轮询间隔,并在可用时连续轮询数据。

  6. 执行轮询语句后返回的结果集将作为入站消息发送到适配器客户端。

注意

UseAmbientTransaction 设置为 False 时,不会调用 PolledDataAvailableStatement 。 适配器直接调用 PollingStatement

注意

XmlPolling 操作涉及与轮询操作相同的步骤。

Strongly-Typed 轮询

使用 SQL 适配器的典型强类型轮询操作涉及以下内容:

  1. 适配器客户端必须在 InboundOperationType 绑定属性中指定TypedPolling为入站操作。 此绑定属性的默认值为 Polling

  2. 适配器客户端必须将入站 ID 指定为连接 URI 的一部分。 入站 ID 可以是任何字符串,并追加到 TypedPolling 操作的标准命名空间,以防止命名空间冲突。

  3. 其余步骤与上一部分所述的轮询操作中列出的步骤 2-6 相同。

    有关与轮询和强类型轮询相关的绑定属性的详细信息,请参阅阅读适用于SQL Server适配器绑定属性的 BizTalk 适配器

注意

执行轮询语句后,可以返回多个结果集。 如果结果集不包含任何行,则不会向适配器客户端发送任何消息。

下图提供有关 SQL 适配器中的轮询工作流的信息。 演示了轮询工作流的两种方案:

  1. PollWhileDataFound 的值设置为“False”时, (默认设置) 。

  2. PollWhileDataFound 的值设置为“True”时。

    轮询工作流 (PollWhileDataFound = False) 轮询工作流 (PollWhileDataFound = True)

轮询和查询通知之间的差异

尽管轮询和查询通知都是入站操作,并通知适配器客户端SQL Server数据库中的数据更改,但下表列出了两者之间的一些差异。 以下差异将帮助你根据要求决定操作:

轮询 查询通知
轮询由适配器启动。 适配器执行语句来验证数据是否可用于轮询,然后,如果某些数据可用于轮询,则通过执行轮询语句来启动轮询。 查询通知由 SQL Server 启动。 适配器发出的通知语句只是指示数据库启动通知,以防语句的结果集中发生更改。
可以使用轮询语句读取或更新SQL Server数据库表中的数据。 可以使用查询通知语句仅读取SQL Server数据库表中的数据。
轮询会通知你已更改的实际数据。 查询通知仅通知数据中的更改类型,例如“插入”、“更新”和“删除”。
数据更改通知取决于轮询间隔,适配器客户端会在每个轮询间隔结束时收到有关数据更改的通知。 提示: 在数据更改持续发生且不希望每次更改发生时收到通知的情况下,轮询可以提供更好的吞吐量。 而是指定轮询间隔,在此间隔之后,你希望收到自上次数据更改通知以来发生的所有更改的通知。 数据更改通知是即时的。

有关 microsoft BizTalk Adapter for SQL Server 中的查询通知的详细信息,请参阅使用 BizTalk Server 接收 SQL 查询通知

另请参阅

可以使用适配器执行哪些操作?