可以将 Oracle 数据库适配器配置为使用 SELECT 语句连续轮询 Oracle 数据库中的表和视图来接收定期的数据更改消息。 可以将 SELECT 语句指定为适配器定期执行的轮询语句来轮询 Oracle 数据库。 (可选)还可以指定适配器在数据发生更改时执行的轮询后 PL/SQL 代码块。 此块通常用于更新目标中查询记录上的字段,或将查询记录移动到另一个表或视图。
若要启用此功能,必须在 Oracle 数据库适配器上指定某些绑定属性。 还可以通过在连接 URI 中设置 PollingId 属性来修改 POLLINGSTMT 操作的目标命名空间。 有关详细信息,请参阅 支持在 Oracle 数据库中接收基于轮询的数据更改消息 ,并在 Oracle 数据库适配器中接收基于轮询的数据更改消息。 有关用于轮询操作的 SOAP 消息结构的信息,请参阅 轮询操作的消息架构2。
使用 Oracle 数据库适配器绑定属性配置轮询操作
下表汇总了用于配置适配器以接收数据更改消息的 Oracle 数据库适配器绑定属性。 在 BizTalk Server 管理控制台中配置接收端口时,必须指定这些绑定属性。
Binding 属性 | DESCRIPTION |
---|---|
InboundOperationType | 指定是要执行轮询还是通知入站操作。 默认值为 轮询。 |
数据可用性声明 | 指定适配器执行的 SQL 语句,以确定是否有任何数据可用于轮询。 仅当记录可用时,将执行为 PollingStatement 绑定属性指定的 SELECT 语句。 默认值 SELECT 1 FROM DUAL 为,这意味着适配器必须继续轮询,无论要轮询的表是否具有数据。 |
PollingInterval | 指定 Oracle 数据库适配器执行 为 PolledDataAvailableStatement 绑定属性指定的语句的间隔(以秒为单位)。 默认值为 500 秒。 轮询间隔定义了连续轮询之间的时间间隔。 如果语句在指定间隔内执行,则适配器会在间隔的剩余时间内休眠。 |
PollingStatement | 指定轮询语句。 若要使用 SELECT 语句轮询,必须为此绑定属性指定 SELECT 语句。 默认值为 null。 必须指定 PollingStatement 绑定属性的值才能启用轮询。 仅当有数据可用于轮询时,才会执行轮询语句,该数据由 PolledDataAvailableStatement 绑定属性确定。 |
PollingAction | 指定轮询操作的动作。 可以使用适配器服务外接程序为操作生成的元数据,确定特定操作的轮询动作。 |
投票后声明 | 指定在执行 PollingStatement 绑定属性指定的语句后执行的语句块。 |
PollWhileDataFound | 指定 Oracle 数据库适配器是否忽略轮询间隔并连续执行轮询语句(如果正在轮询的表中的数据可用)。 如果表中没有可用数据,适配器将还原为按指定的轮询间隔执行轮询语句。 默认值为 false。 |
有关这些属性的更完整说明,请参阅 阅读有关 Oracle 数据库适配器绑定属性的内容。 有关如何使用 Oracle 数据库适配器轮询 Oracle 数据库的完整说明,请阅读进一步。
本主题如何演示轮询
在本主题中,若要演示 Oracle 数据库适配器如何支持使用 SELECT 语句接收数据更改消息,请创建 BizTalk 项目并为 POLLINGSTMT 作生成架构,方法是将 PollingStatement 绑定属性设置为以下内容:
SELECT * FROM ACCOUNTACTIVITY FOR UPDATE
运行示例提供的 SQL 脚本以在数据库中创建这些对象时,将创建 ACCOUNTACTIVITY 表。
注释
本主题中的编排轮询 ACCOUNTACTIVITY 表,该表是通过运行与示例一起提供的脚本创建的基础数据库表。 必须执行与本主题中所述类似的过程来查询任何其他表。
为了演示轮询操作,我们执行以下步骤:
为 PolledDataAvailableStatement 绑定属性指定 SELECT 语句,以确定要轮询的表(ACCOUNTACTIVITY)具有任何数据的位置。 在此示例中,可以将此绑定属性设置为:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
这可确保适配器仅在 ACCOUNTACTIVITY 表存在记录时执行轮询语句。
为 PollingStatement 绑定属性指定前面所述的 SELECT 语句。 此语句检索 ACCOUNTACTIVITY 表中的所有行。
执行 PL/SQL 块作为 PostPollStatement 绑定属性的一部分。 此语句会将所有数据从 ACCOUNTACTIVITY 表移动到数据库中的另一个表。 发生这种情况后,下次执行 为 PollingStatement 指定的语句时,它将不会提取任何数据。
在向 ACCOUNTACTIVITY 表添加更多数据之前,不会收到任何轮询消息。 因此,必须使用新记录重新填充 ACCOUNTACTIVITY 表。 为此,可以运行示例提供的more_activity_data.sql脚本。 运行此脚本后,下一个轮询操作将提取插入到表中的新记录。
如何从 Oracle 接收数据更改消息
使用 Oracle 数据库适配器与 BizTalk Server 配合对 Oracle 数据库执行操作,涉及以下在开发 BizTalk 应用程序中的构建模块中描述的步骤。 若要将适配器配置为使用 SELECT 语句轮询 Oracle 数据库,这些任务包括:
创建 BizTalk 项目,并为要轮询的表生成 POLLINGSTMT 操作的架构。
在 BizTalk 项目中创建一条消息,用于从 Oracle 数据库接收消息。
创建业务流程以接收来自 Oracle 的消息并将其保存到文件夹中。
生成和部署 BizTalk 项目。
通过创建物理发送和接收端口来配置 BizTalk 应用程序。
重要
对于入站轮询方案,必须始终配置单向接收端口。 入站操作不支持双向接收端口。
启动 BizTalk 应用程序。
本主题提供执行这些任务的说明。
生成架构
你必须为 POLLINGSTMT 操作生成架构。 使用“Consume Adapter Service Add-in”生成架构时执行以下任务。
在生成架构时指定 PollingStatement 绑定属性的值。 有关此绑定属性的详细信息,请参阅 有关 Oracle 数据库适配器绑定属性的信息。 例如,将以下内容指定为轮询语句:
SELECT * FROM ACCOUNTACTIVITY FOR UPDATE
选择协定类型为服务(入站操作)。
生成 POLLINGSTMT 操作的架构。
有关关于如何生成架构的更多信息,请参阅 浏览、搜索和获取 Oracle 数据库操作的元数据。
定义消息和消息类型
前面生成的架构描述了业务流程中消息所需的“类型”。 消息通常是变量,类型由相应的架构定义。 生成架构后,必须将其链接到 BizTalk 项目的业务流程视图中的消息。
对于本主题,必须创建一条消息才能从 Oracle 接收消息。
执行以下步骤以创建消息并将其链接到架构。
创建消息并链接到架构
将一项编排添加到 BizTalk 项目中。 在解决方案资源管理器中,右键单击 BizTalk 项目名称,指向 “添加”,然后单击“ 新建项”。 键入 BizTalk 业务流程的名称,然后单击“添加”。
打开 BizTalk 项目的业务流程视图窗口(如果尚未打开)。 单击 “视图”,指向 “其他窗口”,然后单击 “编排视图”。
在 业务流程视图中,右键单击 “消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下作:
用这个 要执行的操作 标识符 键入 Receive。 消息类型 从下拉列表中,展开 “架构”,然后选择 TablePolling.OracleDBBinding,其中 TablePolling 是 BizTalk 项目的名称。 OracleDBBindingSchema 是为 ACCOUNTACTIVITY 表上的 POLLINGSTMT 操作生成的响应架构。
重要 由于轮询是一种单向作,因此适配器生成的架构不包含响应节点,因此架构中只有一个根节点。 如果将此类架构用于消息类型,则必须按生成的架构的文件名标识架构。
例如,如果您为双向操作创建模式,则该模式文件中的节点名称为OracleDBBindingSchema
的节点可能类似于“请求”和“响应”。 如果要在映射到请求架构的业务流程中创建消息,可以通过查找OracleDBBindingSchema.Request
来标识列表中的架构。 但是,在轮询操作的情况下,由于唯一的节点是“POLLINGSTMT”,因此很难识别要映射到的架构,因为具有单个节点的架构未显示为 <schemafilename>.<rootnodename>。 相反,此类架构仅按文件名列出。 在这种情况下,识别架构的唯一方法是通过架构文件名,例如 OracleDBBindingSchema。
设置业务流程
必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 Oracle 接收基于轮询的数据更改消息。 在此业务流程中,适配器通过执行 为 PollingStatement 绑定属性指定的 SELECT 语句来接收响应。 SELECT 语句的响应消息将保存到 FILE 位置。 轮询 Oracle 数据库的典型业务流程将包含:
接收和发送形状以分别从 Oracle 接收消息并发送到 FILE 端口。
用于从 Oracle 数据库接收消息的单向接收端口。
重要
对于入站轮询方案,必须始终配置单向接收端口。 入站操作不支持双向接收端口。
单向发送端口,用于从 Oracle 数据库发送轮询响应。
示例编排如下所示。
添加消息形状
请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是消息形状的名称,如上述编排中所显示。
形状 | 形状类型 | 性能 |
---|---|---|
接收消息 | 接收 | - 将 名称 设置为 ReceiveMessage - 将 “激活 ”设置为 True |
保存消息 | 发送 | - 将 名称 设置为 SaveMessage |
添加端口
请确保为每个逻辑端口指定以下属性。 端口列中列出的名称是在编排中显示的端口的名称。
港口 | 性能 |
---|---|
OracleReceivePort | - 将 标识符 设置为 OracleReceivePort - 将 类型 设置为 OracleReceivePortType - 将 通信模式 设置为 单向 - 将通信方向设置为接收 |
保存消息端口 | - 将 标识符 设置为 SaveMessagePort - 将 类型 设置为 SaveMessagePortType - 将 通信模式 设置为 单向 - 将通信方向设置为发送 |
为动作形状指定消息并连接至端口
下表列出了为操作形状指定消息及将消息链接到端口时需要设置的属性及其值。 Shape 列中列出的名称是前文提到的业务编排中显示的消息形状的名称。
形状 | 性能 |
---|---|
接收消息 | - 将 消息 设置为 接收 - 将 操作 设置为 OracleReceivePort.Polling.Request |
保存消息 | - 将 消息 设置为 接收 - 将 操作 设置为 SaveMessagePort.Polling.Request |
指定这些属性后,消息形状符和端口被连接,您的编排已完成。
现在必须生成 BizTalk 解决方案并将其部署到 BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程。
配置 BizTalk 应用程序
部署 BizTalk 项目后,前面创建的业务流程将列在 BizTalk Server 管理控制台中的 “业务流程 ”窗格下。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关演练,请参阅 演练:部署基本 BizTalk 应用程序。
配置应用程序涉及:
为应用程序选择主机。
将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此编排,必须:
定义硬盘上的一个位置以及一个相应的 FILE 端口,BizTalk 业务流程会在此处投放来自 Oracle 的消息。 这些消息将响应您为接收端口指定的轮询语句。
定义物理 WCF-Custom 或 WCF-OracleDB 单向接收端口。 此端口轮询 Oracle 数据库。 有关如何创建接收端口的信息,请参阅 手动配置到 Oracle 数据库适配器的物理端口绑定。 请确保为接收端口指定以下绑定属性。
Binding 属性 价值 InboundOperationType 将此设置为 轮询。 数据可用性声明 对于此示例,请将此绑定属性设置为:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
这可确保适配器仅在 ACCOUNTACTIVITY 表存在记录时执行轮询语句。PollingStatement 对于此绑定属性,请指定 SELECT 语句以从 ACCOUNTACTIVITY 表中检索所有记录。 对于此示例,请将此绑定属性设置为:
SELECT * FROM ACCOUNTACTIVITY FOR UPDATE
投票后声明 指定轮询后语句,将所有数据从 ACCOUNTACTIVITY 表移到另一个表。 对于此示例,请将此绑定属性设置为:
BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;
有关不同绑定属性的详细信息,请参阅 有关 Oracle 数据库适配器绑定属性的信息。
注释
建议在使用 Oracle 数据库适配器执行入站作时配置事务隔离级别和事务超时。 可以通过在配置接收端口时添加服务行为来执行此作。 有关如何添加服务行为的说明,请参阅 “配置事务隔离级别和事务超时”。
启动应用程序
必须启动 BizTalk 应用程序才能轮询 Oracle 数据库。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程。
在此阶段,请确保:
WCF-Custom 或 WCF-OracleDB 单向接收端口正在运行,该端口使用为 PollingStatement 绑定属性指定的 SELECT 语句轮询 Oracle。
从 Oracle 数据库接收消息的 FILE 发送端口正在运行。
正在运行该操作的 BizTalk 业务流程。
执行操作
运行应用程序后,将按相同的顺序执行以下一组作:
适配器执行 PolledDataAvailableStatement ,它返回一个正值,指示适配器执行 为 PollingStatement 绑定属性指定的语句。
适配器执行 PollingStatement 绑定属性的 SELECT 语句,并返回 ACCOUNTACTIVITY 表中的所有行。 Oracle 数据库的响应如下所示:
<?xml version="1.0" encoding="utf-8" ?> <POLLINGSTMT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/POLLINGSTMT"> <POLLINGSTMTRECORD> <POLLINGSTMTRECORD> <TID>1</TID> <ACCOUNT>100001</ACCOUNT> <AMOUNT>500</AMOUNT> <DESCRIPTION /> <TRANSDATE>2008-08-03T20:10:28</TRANSDATE> <PROCESSED>n</PROCESSED> <POLLINGSTMTRECORD> <POLLINGSTMTRECORD> ...... ...... </POLLINGSTMTRECORD> ...... ...... </POLLINGSTMTRECORD> </POLLINGSTMT>
适配器执行轮询后语句,该语句会将所有数据从 ACCOUNTACTIVITY 表移到另一个表。
轮询间隔后,适配器再次执行 PolledDataAvailableStatement。 由于 ACCOUNTACTIVITY 表当前没有任何记录,PolledDataAvailableStatement 不返回任何正值,因此适配器不会执行用于 PollingStatement 绑定属性的语句。 因此,适配器客户端不会收到任何轮询消息。
在将某些记录显式插入到 ACCOUNTACTIVITY 表中之前,适配器客户端不会再获取任何轮询消息。 若要插入更多记录,可以运行示例提供的more_activity_data.sql脚本。 运行此脚本后,下次执行 PolledDataAvailableStatement 时,它将返回正值。 因此,适配器执行轮询语句后,适配器客户端会再次收到轮询消息。
注释
Oracle 数据库适配器将持续轮询,直到您在 BizTalk Server 管理控制台中明确禁用接收端口。
可能的异常
有关在使用 BizTalk Server 在 Oracle 数据库上运行轮询查询时可能会遇到的异常的信息,请参阅 Oracle 数据库适配器的异常和错误处理。
最佳做法
部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从该文件导入配置设置,以便无需为同一业务流程创建发送端口和接收端口。 有关绑定文件的详细信息,请参阅 重复使用 Oracle 数据库适配器绑定。