使用 SELECT 语句和 FOR XML 子句从 SQL 使用 BizTalk Server 接收轮询消息
可以使用包含 FOR XML 子句的 SELECT 语句或存储过程将 SQL 适配器配置为接收SQL Server表或视图的定期数据更改消息。 可以将这些语句指定为适配器为轮询数据库的轮询语句。 轮询语句可以是 SELECT 语句,也可以是返回结果集的存储过程。
有关适配器如何支持轮询的详细信息,请参阅 支持轮询。 有关轮询操作的 SOAP 消息的结构的信息,请参阅 轮询和 TypedPolling 操作的消息架构。 SQL FOR XML 子句 提供了更多详细信息。
注意
本主题演示如何使用 XmlPolling 入站操作接收轮询消息。 XmlPolling 操作用于使用包含 FOR XML 子句的 SELECT 语句或存储过程轮询SQL Server数据库。 XmlPolling 操作的消息包括通过执行 SELECT 语句或 SQL Server Management Studio 中的存储过程收到的 xml 消息。
还可以使用适配器接收不同类型的轮询消息。
- 如果要获取弱类型轮询消息,则必须使用轮询操作。 有关详细信息,请参阅使用 BizTalk Server 从SQL Server接收基于轮询的数据更改消息。
- 如果要获取强类型轮询消息,必须使用 TypedPolling 操作。 还必须使用 TypedPolling 操作在单个 BizTalk 应用程序中执行多个轮询操作。 有关如何执行 TypedPolling 操作的说明,请参阅使用 BizTalk Server 从SQL Server接收基于强类型轮询的数据更改消息。
重要
如果要在单个 BizTalk 应用程序中执行多个轮询操作,则必须将 InboundID 连接属性指定为连接 URI 的一部分,使其唯一。 使用唯一的连接 URI,可以创建多个接收端口来轮询同一数据库,甚至数据库中的同一表。 有关详细信息,请参阅使用 BizTalk Server 从 SQL 接收跨多个接收端口轮询消息。
本主题如何演示轮询
在本主题中,为了演示 SQL 适配器如何支持接收数据更改消息,我们将 SELECT 语句与 FOR XML 子句配合使用来轮询SQL Server数据库。 在 SQL Server Management Studio 中调用此类语句时,输出采用 xml 消息的形式。 若要使用此类语句轮询SQL Server数据库,必须具有响应 xml 消息的架构。 SQL 适配器要求此架构在使用 FOR XML 子句执行 SELECT 语句后接收轮询消息。 因此,若要将 SELECT 语句与 FOR XML 子句配合使用来轮询SQL Server数据库,必须执行以下任务集。
使用 FOR XML 子句为 SELECT 语句生成 XML 响应消息的架构。
创建 BizTalk 项目,并将生成的架构添加到项目。
在 BizTalk 项目中创建一条消息,用于从 SQL Server 数据库接收 XML 响应消息。
创建业务流程以接收来自SQL Server数据库的消息并将其保存到文件夹。
生成和部署 BizTalk 项目。
通过创建物理发送和接收端口来配置 BizTalk 应用程序。
重要
对于入站轮询方案,必须始终配置单向 WCF-Custom 或 WCF-SQL 接收端口。 入站操作不支持双向 WCF-Custom 或 WCF-SQL 接收端口。
启动 BizTalk 应用程序。
为 SELECT 语句的响应消息生成架构
可以通过将 子句与 子句一起为 xmlschema
SELECT 语句生成响应消息的 for xml
架构。 在本主题中,我们使用 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 项目
在 Visual Studio 中创建 BizTalk 项目。
将为存储过程生成的响应架构添加到 BizTalk 项目。 右键单击解决方案资源管理器中的 BizTalk 项目,指向“添加”,然后单击“现有项”。 在“添加现有项”对话框中,导航到保存架构的位置,然后单击“ 添加”。
在 Visual Studio 中打开架构并进行以下更改。
将节点添加到架构,并将现有根节点移到此新添加的节点下。 为根节点命名。 对于本主题,请将根节点重命名为 根节点。
为 SELECT 语句生成的响应架构引用 sqltypes.xsd。 可以从 获取 sqltypes.xsd 架构 https://go.microsoft.com/fwlink/?linkid=31850。 将 sqltypes.xsd 架构添加到 BizTalk 项目。 有关此架构的详细信息,请转到:
在为 SELECT 语句生成的架构中,将 的值
import schemaLocation
更改为以下内容。import schemaLocation=”sqltypes.xsd”
之所以这样做,是因为已将 sqltypes.xsd 架构添加到 BizTalk 项目。
为架构提供目标命名空间。 <单击“架构”>节点,并在“属性”窗格中指定“目标命名空间”属性中的命名空间。 对于本主题,将 命名空间指定为
http://ForXmlPolling/namespace
。
定义消息和消息类型
前面生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 生成架构后,必须将其链接到 BizTalk 项目的业务流程视图中的消息。
对于本主题,必须创建一条消息才能从SQL Server数据库接收消息。
执行以下步骤以创建消息并将其链接到架构。
创建消息并链接到架构
将业务流程添加到 BizTalk 项目。 在解决方案资源管理器中,右键单击 BizTalk 项目名称,指向“添加”,然后单击“新建项”。 键入 BizTalk 业务流程的名称,然后单击“ 添加”。
打开 BizTalk 项目的业务流程视图窗口(如果尚未打开)。 单击“ 视图”,指向“ 其他窗口”,然后单击“ 业务流程视图”。
在 业务流程视图中,右键单击“ 消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下操作:
使用此选项 要执行此操作 标识符 键入 PollingMessage。 消息类型 在下拉列表中,展开“ 架构”,然后选择“ ForXMLPolling.PollingResponse”,其中 ForXMLPolling 是 BizTalk 项目的名称。 PollingResponse 是通过执行 SELECT 语句生成的响应架构的名称,如使用 SELECT 语句和 FOR XML 子句从 SQL 使用 BizTalk Server 中所述。
设置业务流程
必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 SQL Server 数据库接收基于轮询的数据更改消息。 在此业务流程中,适配器接收为 PollingStatement 绑定属性指定的 select 语句的响应。 SELECT 语句的响应将保存到文件位置。 轮询SQL Server数据库的典型业务流程将包含:
接收和发送形状以接收来自SQL Server的消息,并分别发送到文件端口。
用于从SQL Server接收消息的单向接收端口。
重要
对于入站轮询方案,必须始终配置单向接收端口。 入站操作不支持双向接收端口。
单向发送端口,用于将轮询响应从SQL Server数据库发送到文件夹。
示例业务流程类似于以下内容。
添加消息形状
请确保为每个消息形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。
形状 | 形状类型 | 属性 |
---|---|---|
ReceiveMessage | 接收 | - 将 Name 设置为 ReceiveMessage - 将 “激活” 设置为 “True” |
SaveMessage | 发送 | - 将 “名称 ”设置为 SaveMessage |
添加端口
请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。
端口 | 属性 |
---|---|
SQLReceivePort | - 将 标识符 设置为 SQLReceivePort - 将 Type 设置为 SQLReceivePortType - 将 通信模式 设置为 单向 - 将 通信方向 设置为 接收 |
SaveMessagePort | - 将 标识符 设置为 SaveMessagePort - 将 Type 设置为 SaveMessagePortType - 将 通信模式 设置为 单向 - 将“通信方向”设置为“发送” |
指定操作形状的消息并连接到端口
下表指定应设置的属性及其值,以便为操作形状指定消息并将消息链接到端口。 Shape 列中列出的名称是前面提到的业务流程中显示的消息形状的名称。
形状 | 属性 |
---|---|
ReceiveMessage | - 将 消息 设置为 接收 - 将 操作 设置为 SQLReceivePort.XmlPolling.Request |
SaveMessage | - 将 消息 设置为 接收 - 将 操作 设置为 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 适配器的物理端口绑定。 请确保为接收端口指定以下绑定属性。
重要
如果在设计时指定了绑定属性,则不需要执行此步骤。 在这种情况下,可以通过导入使用适配器服务外接程序创建的绑定文件,创建 WCF-custom 或 WCF-SQL 接收端口,并设置所需的绑定属性。 有关详细信息 ,请参阅使用端口绑定文件配置物理端口绑定以使用 SQL 适配器。
Binding 属性 值 InboundOperationType 请确保将此设置为 XmlPolling。 PolledDataAvailableStatement 请确保指定 SQL 语句。 对于本主题,请指定:
SELECT COUNT(*) FROM Employee
PollingStatement 请确保提供在生成架构时指定的相同语句(不含 xmlschema
子句),如使用 SELECT 语句和 FOR XML 子句从 SQL 使用 BizTalk Server 接收轮询消息中所述。
SELECT Employee_ID ,Name ,Designation FROM Employee for xml auto
注意: 请注意,SELECT 语句不包含xmlschema
子句。XmlStoredProcedureRootNodeName 指定添加到为 SELECT 语句生成的响应架构的根节点的名称,如 为 SELECT 语句的响应消息生成架构中所述。 对于本主题,请将此项设置为 Root。 XmlStoredProcedureRootNodeNamespace 指定为 SELECT 语句生成的响应架构的目标命名空间,如为 SELECT 语句的响应消息生成架构中所述。 对于本主题,请将此设置为 http://ForXmlPolling/namespace
。有关不同绑定属性的详细信息,请参阅阅读有关 BizTalk 适配器SQL Server适配器绑定属性的信息。
注意
建议在使用 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>
请注意,轮询消息接收的架构与使用 xmlschema 子句执行 SELECT 语句生成的架构相同。 另请注意,根节点和命名空间分别与 XmlStoredProcedureRootNodeName 和XmlStoredProcedureRootNodeNamespace 绑定属性的值相同。
注意
SQL 适配器将继续轮询,直到从 BizTalk Server 管理控制台显式禁用接收端口。
最佳实践
部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建发送端口和接收端口。 有关绑定文件的详细信息,请参阅 重用适配器绑定。