添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

可以使用存储过程、函数或打包的过程和函数定期轮询 Oracle 数据库,将 Oracle 数据库适配器配置为接收定期的数据更改消息。 可以指定存储过程、函数或打包过程,并将函数指定为轮询语句,适配器会定期执行该语句来轮询 Oracle 数据库。

若要启用此功能,必须在 Oracle 数据库适配器上指定某些绑定属性。 还可以通过在连接 URI 中设置 PollingId 属性来修改 POLLINGSTMT 操作的目标命名空间。 有关详细信息,请参阅 支持在 Oracle 数据库中接收基于轮询的数据更改消息 在 Oracle 数据库适配器中接收基于轮询的数据更改消息 。 有关用于轮询操作的 SOAP 消息的结构的信息,请参阅 轮询操作的消息架构

使用 Oracle 数据库适配器绑定属性配置轮询操作

Oracle 数据库适配器在事务中执行轮询查询和任何轮询后 PL/SQL 代码块。 下表汇总了用于配置适配器以接收数据更改消息的 Oracle 数据库适配器绑定属性。 在BizTalk Server管理控制台中配置 WCF-Custom 或 WCF-OracleDB 接收端口时,必须指定这些绑定属性。

Binding 属性

有关这些属性的更完整说明,请参阅 阅读有关 Oracle 数据库适配器绑定属性的信息 。 有关如何使用 Oracle 数据库适配器轮询 Oracle 数据库的完整说明,请进一步阅读。

本主题如何演示轮询

本主题演示如何使用存储过程轮询 Oracle 数据库。 创建 BizTalk 项目,并为要用于轮询 Oracle 数据库的存储过程生成架构。 在本主题中,我们使用 GET_ACTIVITYS 存储过程轮询 ACCOUNTACTIVITY 表。 此存储过程可用于 SCOTT 架构中的 ACCOUNT_PKG 包。 可以运行示例随附的 SQL 脚本,在数据库中创建这些对象。

本主题中的业务流程轮询 ACCOUNTACTIVITY 表,该表是通过运行示例提供的脚本创建的数据库表。 必须执行本主题中所述的类似过程才能轮询任何其他表。

为了演示轮询操作,我们执行以下操作:

  • PolledDataAvailableStatement 绑定属性指定 SELECT 语句,以确定轮询的表 (ACCOUNTACTIVITY) 包含任何数据的位置。 在此示例中,可以将此绑定属性设置为:

    SELECT COUNT (*) FROM ACCOUNTACTIVITY  
    

    这可确保适配器仅在 ACCOUNTACTIVITY 表具有一些记录时执行轮询语句。

  • 通过提供请求消息作为 PollingStatement 绑定属性的一部分来执行存储过程,GET_ACTIVITYS。 此存储过程将检索 ACCOUNTACTIVITY 表中的所有行,并且你将从适配器收到响应消息。

  • 执行 PL/SQL 块作为 PostPollStatement 绑定属性的一部分。 此语句会将 ACCOUNTACTIVITY 表中的所有数据移到数据库中的另一个表。 一旦发生这种情况,下次执行 PollingStatement 时,它将不会提取任何数据,因此GET_ACTIVITYS存储过程将返回空响应消息。

  • 在将更多数据添加到 ACCOUNTACTIVITY 表之前,你将继续收到空的响应消息。 因此,必须使用新记录重新填充 ACCOUNTACTIVITY 表。 为此,可以运行示例随附的 more_activity_data.sql 脚本。 运行此脚本后,下一个轮询操作将提取插入到表中的新记录。

    如何从 Oracle 接收数据更改消息

    使用带 BizTalk Server 的 Oracle 数据库适配器对 Oracle 数据库执行操作涉及使用 Oracle 数据库开发 BizTalk 应用程序的构建基块中所述的以下过程任务。 若要使用存储过程将适配器配置为轮询 Oracle 数据库,请执行以下操作:

  • 创建 BizTalk 项目,并为要用于轮询的存储过程生成架构。

  • 在 BizTalk 项目中创建一条消息,用于从 Oracle 数据库接收消息。

  • 创建业务流程以从 Oracle 数据库接收消息并将其保存到文件夹。

  • 生成并部署 BizTalk 项目。

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

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

  • 启动 BizTalk 应用程序。

    本主题提供有关执行这些任务的说明。

    必须为GET_ACTIVITYS操作生成架构。 使用“使用适配器服务加载项”生成架构时执行以下任务。

  • 选择协定类型作为 服务 (入站操作)

  • GET_ACTIVITYS 过程生成架构。

    有关如何生成架构的详细信息,请参阅 浏览、搜索和获取 Oracle 数据库操作的元数据

    定义消息和消息类型

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

    对于本主题,必须创建一条消息来接收来自 Oracle 的消息。

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

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

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

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

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

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

    使用此选项 要执行此操作 从下拉列表中展开“ 架构”,然后选择“ Polling.OracleEBSBindingSchema”,其中 轮询 是 BizTalk 项目的名称。 OracleEBSBindingSchema 是为 GET_ACTIVITYS 存储过程生成的响应架构。

    重要: 由于轮询是单向操作,因此适配器生成的架构不包含响应节点,因此架构中只有一个根节点。 如果将此类架构用于消息类型,则必须通过生成的架构的文件名来标识架构。

    例如,如果为双向操作创建架构,则架构文件中具有名称 OracleEBSBindingSchema 的节点可能类似于“请求”和“响应”。 如果要在业务流程中创建映射到请求架构的消息,可以通过查找 OracleEBSBindingSchema.Request来标识列表中的架构。 但是,在轮询操作中,由于唯一的节点是“轮询”,因此很难识别要映射到的架构,因为具有单个节点的架构未列为 <schemafilename>。<rootnodename>。 相反,此类架构仅按文件名列出。 在这种情况下,标识架构的唯一方法是使用架构文件名,例如 OracleEBSBindingSchema。

    使用适配器服务外接程序为GET_ACTIVITYS存储过程的入站和出站操作生成架构。 必须使用入站操作的架构才能:

  • 映射作为业务流程的一部分创建的消息。

  • 若要检索操作,必须在运行时为 PollingAction 绑定属性指定。

    必须使用出站操作的架构来获取请求消息,必须指定为 PollingStatement 绑定属性的一部分。

    设置业务流程

    必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 Oracle 接收基于轮询的数据更改消息。 在此业务流程中,适配器通过执行指定请求消息作为 PollingStatement 绑定属性的一部分的存储过程来接收响应。 存储过程的响应消息将保存到文件位置。 轮询 Oracle 数据库的典型业务流程将包含:

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

  • 用于从 Oracle 数据库接收消息的单向接收端口。

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

  • 用于从 Oracle 数据库发送轮询响应的单向发送端口。

    示例业务流程如下所示。

    6eddfe32-bfd0-4bd9-9e2a-fb4a7d0b53e3Oracle

    添加消息形状

    请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。

    OracleReceivePort - 将 标识符 设置为 OracleReceivePort

    - 将 Type 设置为 OracleReceivePortType

    - 将 通信模式 设置为 单向

    - 将 通信方向 设置为 接收 SaveMessagePort - 将 标识符 设置为 SaveMessagePort

    - 将 Type 设置为 SaveMessagePortType

    - 将 通信模式 设置为 单向

    - 将 “通信方向 ”设置为 “发送”

    为操作形状指定消息并连接到端口

    下表指定了应设置的属性及其值,以便为操作形状指定消息并将消息链接到端口。 “形状”列中列出的名称是前面提到的业务流程中显示的消息形状的名称。

    指定这些属性后,将连接消息形状和端口,并且业务流程已完成。

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

    配置 BizTalk 应用程序

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

    配置应用程序涉及:

  • 为应用程序选择主机。

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

  • 在硬盘上定义一个位置和相应的 FILE 端口,BizTalk 业务流程将在其中删除来自 Oracle 的消息。 这些消息将响应你为接收端口指定的轮询语句。

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

    Binding 属性 PollingStatement 对于此绑定属性,指定请求消息以调用GET_ACTIVITYS存储过程。 可以从使用适配器服务外接程序生成的出站操作的架构中获取请求消息。 必须提供整个 XML 消息作为此绑定属性的输入。 对于此示例,请将此绑定属性设置为:

    <GET_ACTIVITYS xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACTIVITY"> <INRECS>OPEN ? FOR SELECT * FROM ACCOUNTACTIVITY</INRECS> </GET_ACTIVITYS>

    GET_ACTIVITYS存储过程采用输入 REF CURSOR 作为参数。 PostPollStatement 指定轮询后语句,将所有数据从 ACCOUNTACTIVITY 表移到另一个表。 对于此示例,请将此绑定属性设置为:

    BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;

    有关不同绑定属性的详细信息,请参阅 阅读有关 Oracle 数据库适配器绑定属性的信息

    建议在使用 Oracle 数据库适配器执行入站操作时配置事务隔离级别和事务超时。 为此,可以在配置接收端口时添加服务行为。 有关如何添加服务行为的说明,请参阅 配置事务隔离级别和事务超时

    在此阶段,请确保:

  • WCF-Custom 或 WCF-OracleDB 单向接收端口正在运行,该端口使用为 PollingStatement 绑定属性指定的存储过程轮询 Oracle。

  • 从 Oracle 数据库接收消息的 FILE 发送端口正在运行。

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

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

  • 适配器执行 PolledDataAvailableStatement ,该语句返回一个正值,指示适配器执行为 PollingStatement 绑定属性指定的语句。

  • 适配器执行为 PollingStatement 绑定属性指定的GET_ACTIVITYS存储过程,并返回 ACCOUNTACTIVITY 表中的所有行。 来自 Oracle 数据库的响应如下所示:

    <?xml version="1.0" encoding="utf-8" ?>   
    <GET_ACTIVITYS xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/PollingPackage/ACCOUNT_PKG">  
      <OUTRECS>  
        <OUTRECSRecord xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/ReferencedRecordTypes/SCOTT/ACCOUNT_PKG/GET_ACTIVITYS/SCOTT/GET_ACTIVITYS">  
          <TID>1</TID>   
          <ACCOUNT>100001</ACCOUNT>   
          <AMOUNT>500</AMOUNT>   
          <DESCRIPTION />   
          <TRANSDATE>2008-06-21T15:52:19</TRANSDATE>   
          <PROCESSED>n</PROCESSED>   
        </OUTRECSRecord>  
        <OUTRECSRecord xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/ReferencedRecordTypes/SCOTT/ACCOUNT_PKG/GET_ACTIVITYS/SCOTT/GET_ACTIVITYS">  
          ......  
          ......   
        </OUTRECSRecord>  
        ......  
        ......  
      </OUTRECS>  
    </GET_ACTIVITYS>  
    
  • 适配器执行轮询后语句,该语句将所有数据从 ACCOUNTACTIVITY 表移到另一个表。

  • 轮询间隔后,适配器再次执行 PolledDataAvailableStatement。 由于 ACCOUNTACTIVITY 表现在没有记录, 因此 PolledDataAvailableStatement 不返回正值,因此适配器不会执行为 PollingStatement 绑定属性指定的语句。 因此,适配器客户端不会收到任何轮询消息。

  • 在将某些记录显式插入 ACCOUNTACTIVITY 表之前,适配器客户端不会再收到任何轮询消息。 若要插入更多记录,可以运行示例随附的 more_activity_data.sql 脚本。 运行此脚本后,下次执行 PolledDataAvailableStatement 时,它将返回正值。 因此,适配器执行轮询语句,适配器客户端再次接收轮询消息。

    Oracle 数据库适配器将继续轮询,直到从 BizTalk Server 管理控制台显式禁用接收端口。

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

    使用 BizTalk Server 轮询 Oracle 数据库

  •