可以将 SQL 适配器配置为接收 SQL Server 表或视图的定期数据更改消息。 可以指定让适配器执行的轮询语句,以对数据库进行轮询。 轮询语句可以是 SELECT 语句或返回结果集的存储过程。
有关适配器如何支持轮询的详细信息,请参阅 对轮询的支持。 有关轮询操作的 SOAP 消息结构信息,请参阅 轮询和 TypedPolling 操作的消息架构。
注释
本主题演示如何使用入站轮询操作来处理轮询消息。 轮询操作的消息不是强类型的,并且轮询对象的架构在运行时与消息一起检索。 如果要获取强类型轮询消息,则必须使用TypedPolling操作。 您还必须使用 TypedPolling 操作,以便在单个 BizTalk 应用程序中执行多个轮询操作。 有关如何执行 TypedPolling 操作的说明,请参阅 使用 BizTalk Server 从 SQL Server 接收基于强类型轮询的数据更改消息。
重要
如果要在单个 BizTalk 应用程序中执行多个轮询作,则必须将 InboundID 连接属性指定为连接 URI 的一部分,使其唯一。 使用唯一的连接 URI,可以创建多个接收端口来轮询同一数据库,甚至是数据库中的同一个表。 有关详细信息,请参阅 使用 BizTalk Server 从 SQL 的多个接收端口接收轮询消息。
本主题如何演示轮询
在本主题中,为演示 SQL 适配器如何支持接收数据更改消息,创建一个 BizTalk 项目,并为 轮询 操作生成架构。 如果要在设计时指定轮询相关的绑定属性,请将 PolledDataAvailableStatement 指定为:
SELECT COUNT(*) FROM Employee
PolledDataAvailableStatement 必须返回包含正值的第一个单元格的结果集。 如果第一个单元格不包含正值,适配器不会执行轮询语句。
作为轮询语句的一部分,执行以下操作:
从 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
执行轮询语句后,将选中 Employee 表中的所有记录,并将 SQL Server 中的消息发送到接收端。 适配器执行MOVE_EMP_DATA存储过程后,所有记录都会移动到 EmployeeHistory 表。 然后,执行ADD_EMP_DETAILS存储过程以向 Employee 表添加新记录。 下一次轮询执行将仅返回单个记录。 此周期将继续,直到禁用轮询 SQL Server 的接收端口。
使用 SQL 适配器的绑定属性来配置轮询查询
下表汇总了用于配置适配器以接收数据更改消息的 SQL 适配器绑定属性。 在 BizTalk Server 管理控制台中配置接收端口时,必须指定这些绑定属性。
注释
在为 轮询 操作生成架构时,您可以选择指定这些绑定属性,即使这不是必须的。 如果您这样做,适配器服务附加组件在生成元数据时生成的端口绑定文件中也会包含您为绑定属性指定的值。 稍后可以在 BizTalk Server 管理控制台中导入此绑定文件,以创建已配置绑定属性的 WCF-custom 或 WCF-SQL 接收端口。 有关使用绑定文件创建端口的详细信息,请参阅 使用端口绑定文件配置物理端口绑定以使用 SQL 适配器。
Binding 属性 | DESCRIPTION |
---|---|
InboundOperationType | 指定是否要执行 轮询、类型轮询 还是 通知 入站作业。 默认值为 轮询。 |
数据可用性声明 | 指定适配器执行的 SQL 语句,以确定是否有任何数据可用于轮询。 SQL 语句必须返回由行和列组成的结果集。 仅当某行可用时,才会执行 为 PollingStatement 绑定属性指定的 SQL 语句。 |
PollingIntervalInSeconds | 指定 SQL 适配器执行 为 PolledDataAvailableStatement 绑定属性指定的语句的间隔(以秒为单位)。 默认值为 30 秒。 轮询间隔定义了连续轮询之间的时间间隔。 如果语句在指定间隔内执行,适配器将等待间隔中的剩余时间。 |
PollingStatement | 指定要轮询 SQL Server 数据库表的 SQL 语句。 可以为轮询语句指定简单的 SELECT 语句或存储过程。 默认值为 null。 必须为 PollingStatement 指定一个值才能启用轮询。 仅当有数据可用于轮询时,才会执行轮询语句,该数据由 PolledDataAvailableStatement 绑定属性确定。 可以指定用分号分隔的任意数量的 SQL 语句。 |
PollWhileDataFound | 指定 SQL 适配器是否忽略轮询间隔并连续执行 为 PolledDataAvailableStatement 绑定属性指定的 SQL 语句(如果正在轮询的表中的数据可用)。 如果表中没有可用数据,适配器将还原为按指定的轮询间隔执行 SQL 语句。 默认值为 false。 |
有关这些属性的更完整说明,请参阅 有关适用于 SQL Server 适配器绑定属性的 BizTalk 适配器的信息。 有关如何使用 SQL 适配器轮询 SQL Server 的完整说明,请阅读进一步。
如何从 SQL Server 数据库接收数据更改消息
使用 SQL 适配器和 BizTalk Server 对 SQL Server 数据库进行操作涉及到在使用 SQL 适配器开发 BizTalk 应用程序的构建模块中所述的过程任务。 若要将适配器配置为接收数据更改消息,这些任务包括:
创建 BizTalk 项目,然后为 轮询 生成架构。 (可选)可以为 PolledDataAvailableStatement 和 PollingStatement 绑定属性指定值。
在 BizTalk 项目中创建一条消息,用于从 SQL Server 数据库接收消息。
创建业务流程以接收来自 SQL Server 数据库的消息并将其保存到文件夹中。
生成和部署 BizTalk 项目。
通过创建物理发送和接收端口来配置 BizTalk 应用程序。
重要
对于入站轮询场景,必须始终配置单向 WCF-Custom 或 WCF-SQL 接收端口。 入站操作不支持双向 WCF-Custom 或 WCF-SQL 接收端口。
启动 BizTalk 应用程序。
本主题提供执行这些任务的说明。
生成架构
必须为 轮询 操作生成模式。 有关如何生成架构的详细信息,请参阅 使用 SQL 适配器在 Visual Studio 中检索 SQL Server 上的操作元数据 。 生成架构时执行以下任务。 如果不想在设计时指定绑定属性,请跳过第一步。
为 PolledDataAvailableStatement 和 PollingStatement 绑定属性指定一个值,同时生成架构。 有关此绑定属性的详细信息,请参阅 有关 SQL Server 适配器绑定属性的 BizTalk 适配器的信息。
有关如何指定绑定属性的说明,请参阅 配置 SQL 适配器的绑定属性。
选择协定类型为服务(入站操作)。
为轮询生成架构。
定义消息和消息类型
前面生成的架构描述了业务流程中消息所需的“类型”。 消息通常是变量,类型由相应的架构定义。 生成架构后,必须将其链接到 BizTalk 项目的业务流程视图中的消息。
对于本主题,必须创建一条消息才能从 SQL Server 数据库接收消息。
执行以下步骤以创建消息并将其链接到架构。
创建消息并链接到架构
将一项编排添加到 BizTalk 项目中。 在解决方案资源管理器中,右键单击 BizTalk 项目名称,指向 “添加”,然后单击“ 新建项”。 键入 BizTalk 业务流程的名称,然后单击“添加”。
打开 BizTalk 项目的业务流程视图窗口(如果尚未打开)。 单击 “视图”,指向 “其他窗口”,然后单击 “编排视图”。
在 业务流程视图中,右键单击 “消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下作:
用这个 要执行的操作 标识符 键入 Receive。 消息类型 从下拉列表中,展开“架构”,然后选择 PollingQuery.Polling,其中 PollingQuery 是 BizTalk 项目的名称。 轮询 是为 轮询 操作生成的模式。
设置业务流程
必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 SQL Server 数据库接收基于轮询的数据更改消息。 在此业务流程中,适配器接收 为 PollingStatement 绑定属性指定的 select 语句的响应。 SELECT 语句的响应将保存到 FILE 位置。 用于轮询 SQL Server 数据库的典型业务流程将包含:
接收和发送形状以接收来自 SQL Server 的消息,并分别发送到 FILE 端口。
用于从 SQL Server 接收消息的单向接收端口。
重要
对于入站轮询方案,必须始终配置单向接收端口。 入站操作不支持双向接收端口。
单向发送端口,用于将轮询响应从 SQL Server 数据库发送到文件夹。
示例编排如下所示。
添加消息形状
请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是消息形状的名称,如上述编排中所显示。
形状 | 形状类型 | 性能 |
---|---|---|
接收消息 | 接收 | - 将 名称 设置为 ReceiveMessage - 将 “激活 ”设置为 True |
保存消息 | 发送 | - 将 名称 设置为 SaveMessage |
添加端口
请确保为每个逻辑端口指定以下属性。 端口列中列出的名称是在编排中显示的端口的名称。
港口 | 性能 |
---|---|
SQL 接收端口 | - 将 标识符 设置为 SQLReceivePort - 将 类型 设置为 SQLReceivePortType - 将 通信模式 设置为 单向 - 将通信方向设置为接收 |
保存消息端口 | - 将 标识符 设置为 SaveMessagePort - 将 类型 设置为 SaveMessagePortType - 将 通信模式 设置为 单向 - 将通信方向设置为发送 |
为动作形状指定消息并连接至端口
下表列出了为操作形状指定消息及将消息链接到端口时需要设置的属性及其值。 Shape 列中列出的名称是前文提到的业务编排中显示的消息形状的名称。
形状 | 性能 |
---|---|
接收消息 | - 将 消息 设置为 接收 - 将 操作 设置为 SQLReceivePort.Polling.Request |
保存消息 | - 将 消息 设置为 接收 - 将 操作 设置为 SaveMessagePort.Polling.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 请确保将此设置为 轮询。 数据可用性声明 请确保指定 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 配置事务隔离级别和事务超时。
启动应用程序
必须启动 BizTalk 应用程序,以便从 SQL Server 数据库接收消息。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程。
在此阶段,请确保:
运行 WCF-Custom 或 WCF-SQL 单向接收端口,该端口使用 为 PollingStatement 绑定属性指定的语句轮询 SQL Server 数据库。
从 SQL Server 接收消息的 FILE 发送端口正在运行。
正在运行该操作的 BizTalk 业务流程。
执行操作
运行应用程序后,将按相同的顺序执行以下一组作:
适配器在 Employee 表上执行 PolledDataAvailableStatement,并确定该表具有用于轮询的记录。
适配器执行轮询语句。 由于轮询语句由 SELECT 语句和存储过程组成,因此适配器将逐个执行所有语句。
适配器首先执行 SELECT 语句,该语句返回 Employee 表中的所有记录。
然后,适配器执行MOVE_EMP_DATA存储过程,该存储过程会将所有数据从 Employee 表移动到 EmployeeHistory 表。 此存储过程不返回任何值。
然后,适配器执行向 Employee 表添加一条记录的ADD_EMP_DETAILS存储过程。 此存储过程返回插入记录的员工 ID。
因此,从 SQL Server 接收的消息将包含多个结果集(对于 SELECT 语句和ADD_EMP_DETAILS存储过程),如下所示:
<?xml version="1.0" encoding="utf-8" ?> <Polling xmlns="http://schemas.microsoft.com/Sql/2008/05/Polling/"> <PolledData> <DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data"> <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element msdata:IsDataSet="true" name="NewDataSet"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="Employee_ID" type="xs:int" /> <xs:element minOccurs="0" name="Name" type="xs:string" /> <xs:element minOccurs="0" name="DOJ" type="xs:dateTime" /> <xs:element minOccurs="0" name="Designation" type="xs:string" /> <xs:element minOccurs="0" name="Job_Description" type="xs:string" /> <xs:element minOccurs="0" name="Photo" type="xs:base64Binary" /> <xs:element minOccurs="0" name="Rating" type="xs:string" /> <xs:element minOccurs="0" name="Salary" type="xs:decimal" /> <xs:element minOccurs="0" name="Last_Modified" type="xs:base64Binary" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet xmlns=""> <NewTable> <Employee_ID>10001</Employee_ID> <Name>John</Name> <Designation>Tester</Designation> <Salary>100000.00</Salary> <Last_Modified>AAAAAAAAF34=</Last_Modified> </NewTable> ........ ........ <NewTable> <Employee_ID>10005</Employee_ID> <Name>Wilson</Name> <Designation>Tester3</Designation> <Salary>100000.00</Salary> <Last_Modified>AAAAAAAAF4E=</Last_Modified> </NewTable> </NewDataSet> </diffgr:diffgram> </DataSet> <DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data"> <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element msdata:IsDataSet="true" name="NewDataSet"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="Employee_ID" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet xmlns=""> <NewTable> <Employee_ID>10006</Employee_ID> </NewTable> </NewDataSet> </diffgr:diffgram> </DataSet> </PolledData> </Polling>
上述响应包含两个数据集。 第一个数据集包含 SELECT 语句的响应。 SELECT 语句选择 Employee 表中的所有记录。 第二个数据集用于ADD_EMP_DETAILS存储过程。 此存储过程将记录添加到 Employee 表,并返回新记录的员工 ID。
注释
MOVE_EMP_DATA存储过程不返回结果集。 因此,响应消息中没有相应的数据集。
适配器再次执行 PollDataAvailableStatement 时,它会找到ADD_EMP_DETAILS存储过程插入的一条记录。 然后,适配器执行 为 PollingStatement 绑定属性指定的所有三个语句。 这一次,来自 SQL Server 的响应仅包含 SELECT 语句的一条记录,以及ADD_EMP_DETAILS存储过程的一条记录。 所有后续轮询都将返回类似的响应。
注释
在从 BizTalk Server 管理控制台显式禁用接收端口之前,SQL 适配器将继续轮询。
最佳做法
部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从该文件导入配置设置,以便无需为同一业务流程创建发送端口和接收端口。 有关绑定文件的详细信息,请参阅 重复使用适配器绑定。