使用 BizTalk Server 在 Oracle 数据库中调用重载的函数和过程

存储过程和函数可以在 Oracle 数据库中重载。 Oracle 数据库适配器通过更改操作的目标命名空间支持重载的函数和过程。 例如,两个重载过程的消息结构如下所示:

Stored Procedure Overload 1:  
<[SP_NAME] xmlns="http://Microsoft.LobServices.OracleDB/2007/03/[SCHEMA]/Package/[PACKAGE_NAME]/[SP_NAME]/overload1">    
  <[PRM1_NAME]>value1</[PRM1_NAME]>  
  <[PRM2_NAME]>value1</[PRM2_NAME]>  
  …  
</[SP_NAME]>  
  
Stored Procedure Overload 2:  
<[SP_NAME] xmlns="http://Microsoft.LobServices.OracleDB/2007/03/[SCHEMA]/Package/[PACKAGE_NAME]/[SP_NAME]/overload2">    
  <[PRM1_NAME]>value1</I_[PRM1_NAME]>  
  <[PRM2_NAME]>value1</I_[PRM2_NAME]>  
  …  
</[SP_NAME]>  

调用重载函数或过程所需的 SOAP 消息结构和 SOAP 操作类似于调用函数和过程,如 函数和过程的消息架构中所述。

调用重载过程类似于调用任何其他函数,如使用 BizTalk Server 调用 Oracle 数据库中的函数和过程中所述。 但是,为了区分重载函数,Oracle 数据库适配器会将唯一字符串追加到节点 ID 及其为重载项目显示的命名空间。 对于第一个重载,此字符串为“overload1”,对于下一个重载为“overload2”,依此类说。

如何调用重载的函数和过程?

使用带 BizTalk Server 的 Oracle 数据库适配器对 Oracle 数据库执行操作涉及构建基块以使用 Oracle 数据库开发 BizTalk 应用程序中所述的过程性任务。 若要调用 Oracle 数据库中的函数,这些任务包括:

  1. 创建 BizTalk 项目,并为要在 Oracle 数据库中调用的重载函数生成架构。

  2. 在 BizTalk 项目中创建消息,以便从 Oracle 数据库发送和接收消息。 必须为每个重载创建消息。

  3. 创建业务流程以调用 Oracle 数据库中的重载函数。

  4. 生成并部署 BizTalk 项目。

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

  6. 启动 BizTalk 应用程序。

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

基于本主题的示例

BizTalk 适配器包还提供了基于本主题的示例 InvokeOverloadedProc。 有关详细信息,请参阅 适配器示例

生成架构

在本主题中,为了演示如何调用重载函数或过程,我们将调用 SCOTT\Package\ACCOUNT_PKG 架构下的 GET_ACCOUNT 过程。 通过运行示例随附的 SQL 脚本,在 SCOTT 架构下创建此包。 这是一个重载的过程,其中:

  • 一个重载将帐户 ID 作为 IN 参数,并返回 ACCOUNT%ROWTYPE 作为 OUT 参数。

  • 第二个重载采用帐户名称作为 IN 参数,并返回 ACCOUNT%ROWTYPE 作为 OUT 参数。

    若要详细了解示例和 SQL 脚本,请参阅 架构示例

    为了调用重载的函数,我们为重载的过程(GET_ACCOUNT.1 和 GET_ACCOUNT.2)生成架构。 有关如何生成架构的详细信息,请参阅 在 Visual Studio 中检索 Oracle Database 操作的元数据

定义消息和消息类型

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

对于本主题,必须创建两个请求-响应消息集:一个请求-响应集用于第一个重载过程,第二个请求-响应集用于第二个重载过程。

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

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

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

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

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

    使用此选项 要执行此操作
    标识符 键入 “请求”。
    消息类型 从下拉列表中展开“ 架构”,然后选择 “InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNT”,其中 InvokeOverloadedProc 是 BizTalk 项目的名称。 OracleDBBindingSchema 是为GET_ACCOUNT过程生成的架构。
  5. 重复上一步,再创建三条消息。 在新邮件的“ 属性 ”窗格中,执行以下操作:

    将标识符设置为 将“消息类型”设置为
    响应 InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNTResponse
    Request2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNT
    Response2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNTResponse

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 调用 Oracle 数据库中的重载过程。 在此业务流程中,在定义的接收位置删除两条请求消息,一条对应于每个重载过程。 Oracle 数据库适配器使用消息,并通过 ODP 将它们传递到 Oracle 数据库。 来自 Oracle 数据库的响应将保存到另一个位置。

由于业务流程同时选取两个请求,因此需要在业务流程中包含并行操作形状。 对于每个并行操作,必须包含“发送和接收”形状,以便将消息发送到 Oracle 数据库并接收响应。 但是,可以使用相同的端口来发送和接收这两个操作的消息。 同时调用重载过程的典型业务流程将包含:

  • 发送和接收形状,用于将消息发送到 Oracle 数据库并接收响应。

  • 单向接收端口,用于接收要发送到 Oracle 数据库的请求消息。

  • 用于将请求消息发送到 Oracle 数据库和接收响应的双向发送端口。

  • 用于将响应从 Oracle 数据库发送到文件夹的单向发送端口。

    为GET_ACCOUNT过程调用第一个和第二个重载的示例业务流程如下所示:

    用于调用重载包的业务流程

添加消息形状

请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。 下表列出了必须为其中一个并行操作包含的形状。

形状 形状类型 属性
ReceiveMessage 接收 - 将 Name 设置为 ReceiveMessage
- 将 “激活” 设置为 “True”
SendMessage 发送 - 将 “名称” 设置为 SendMessage
ReceiveResponse 接收 - 将 Name 设置为 ReceiveResponse
- 将 “激活” 设置为 “False”
SendResponse 发送 - 将 “名称” 设置为 SendResponse

下表列出了必须包含用于其他并行操作的形状。

形状 形状类型 属性
ReceiveMessage2 接收 - 将 Name 设置为 ReceiveMessage2
- 将 “激活” 设置为 “True”
SendMessage2 发送 - 将 Name 设置为 SendMessage2
ReceiveResponse2 接收 - 将 Name 设置为 ReceiveResponse2
- 将 “激活” 设置为 “False”
SendResponse2 发送 - 将 Name 设置为 SendResponse2

添加端口

请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。

端口 属性
FileIn - 将 标识符 设置为 FileIn
- 将 Type 设置为 FileInType
- 将 通信模式 设置为 单向
- 将 通信方向 设置为 接收
LOBPort - 将 标识符 设置为 LOBPort
- 将 Type 设置为 LOBPortType
- 将 通信模式 设置为 请求-响应
- 将 “通信方向 ”设置为 “发送-接收”
SaveResponse - 将 标识符 设置为 SaveResponse
- 将 Type 设置为 SaveResponseType
- 将 通信模式 设置为 单向
- 将“通信方向”设置为“发送

由于你将使用这些端口处理两个请求和响应消息,因此必须为每个端口创建两个操作,其中每个操作对应于一个消息类型。 若要创建操作,请右键单击端口形状,然后选择“ 新建操作”。 将每个端口的第一个操作命名为 Overload1 ,将每个端口的第二个操作命名为 Overload2

使用关联

相关是将传入消息与业务流程的相应实例相匹配的过程。 在业务流程中,将删除两个请求消息,每个重载一个。 使用关联将请求消息与正确的业务流程相关联。 有关相关性的详细信息,请参阅 在业务流程中使用相关性

使用关联
  1. 从为每个重载函数生成的架构提升属性。 例如,从架构中为第一个重载提升 AID 属性;从第二个重载的架构提升 ANAME 属性。 若要升级属性,请在架构视图中右键单击该属性,指向“ 提升”,然后选择“ 快速升级”。 这会将 PropertySchema.xsd 文件添加到 BizTalk 项目。

    有关提升属性的信息,请参阅 提升属性

  2. 在“业务流程视图”中,右键单击“ 关联类型”,然后选择“ 新建关联类型”。

  3. 关联属性 ”对话框列出了在步骤 1 中升级的属性。 选择一个属性,然后单击“ 添加”。

  4. 单击 “确定”

  5. 若要为其他提升的属性创建相关类型,请重复这些步骤。

  6. 根据关联类型所关联的属性重命名相关类型。 可以将 AID 属性 ) 的相关类型重命名为CorrelationType_AID (,将 ANAME 属性) CorrelationType_ANAME (重命名。

  7. 在“业务流程视图”中,右键单击“ 关联集”,然后选择“ 新建关联集”。

  8. 右键单击新添加的关联集,然后单击“ 属性”。 在“属性”窗格中,执行以下操作:

    使用此选项 要执行此操作
    相关类型 InvokeOverloadedProc.CorrelationType_AID
    标识符 Correlation_AID
  9. 添加另一个关联集,并从“属性”窗格中指定以下属性。

    使用此选项 要执行此操作
    相关类型 InvokeOverloadedProc.CorrelationType_ANAME
    标识符 Correlation_ANAME

指定操作形状的消息,并将其连接到端口

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

形状 属性
ReceiveMessage - 将 初始化相关集 设置为 Correlation_AID
- 将 消息 设置为 请求
- 将 操作 设置为 FileIn.Overload1.Request
SendMessage - 将 消息 设置为 请求
- 将 操作 设置为 LOBPort.Overload1.Request
ReceiveResponse - 将 消息 设置为 响应
- 将 操作 设置为 LOBPort.Overload1.Response
SendResponse - 将 消息 设置为 响应
- 将 操作 设置为 SaveResponse.Overload1.Request
ReceiveMessage2 - 将 初始化相关集 设置为 Correlation_ANAME
- 将 消息 设置为 Request2
- 将 操作 设置为 FileIn.Overload2.Request
SendMessage2 - 将 消息 设置为 Request2
- 将 操作 设置为 LOBPort.Overload2.Request
ReceiveResponse2 - 将 消息 设置为 Response2
- 将 操作 设置为 LOBPort.Overload2.Response
SendResponse2 - 将 Message 设置为 Response2
- 将 操作 设置为 SaveResponse.Overload2.Request

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

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

配置 BizTalk 应用程序

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

配置应用程序涉及:

  • 为应用程序选择主机。

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

    • 在硬盘上定义一个位置和相应的文件端口,以便删除请求消息,每个重载过程一个。 BizTalk 业务流程将使用请求消息并将其发送到 Oracle 数据库。

    • 在硬盘上定义一个位置和相应的文件端口,BizTalk 业务流程将删除响应消息,每个重载过程一个,其中包含来自 Oracle 数据库的响应。

    • 定义物理 WCF-Custom 或 WCF-OracleDB 发送端口以将消息发送到 Oracle 数据库。 还必须在发送端口中指定操作。 有关如何创建 WCF-Custom 或 WCF-OracleDB 端口的信息,请参阅 手动配置到 Oracle 数据库适配器的物理端口绑定。 由于 WCF-Custom 或 WCF-OracleDB 发送端口发送和接收符合多个架构的消息并执行两个操作,因此必须为这两个操作设置动态操作。 有关操作的详细信息,请参阅 为 Oracle 数据库配置 SOAP 操作。 对于此业务流程,应按如下所示设置操作:

      <BtsActionMapping>  
        <Operation Name="Overload1" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1" />  
        <Operation Name="Overload2" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload2" />  
      </BtsActionMapping>  
      

      注意

      使用使用适配器服务 BizTalk 项目外接程序生成架构还会创建一个绑定文件,其中包含有关要为这些端口设置的端口和操作的信息。 可以从 BizTalk Server 管理控制台导入此绑定文件,为出站呼叫创建发送端口 () 或接收) 入站呼叫 (端口。 有关详细信息,请参阅 使用到 Oracle 数据库的端口绑定文件配置物理端口绑定

启动应用程序

必须启动 BizTalk 应用程序才能在 Oracle 数据库表中调用函数。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程

在此阶段,请确保:

  • 用于接收业务流程请求消息的 FILE 接收端口正在运行。

  • 用于从业务流程接收响应消息的 FILE 发送端口正在运行。

  • 用于将消息发送到 Oracle 数据库的 WCF-Custom 或 WCF-OracleDB 发送端口正在运行。

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

执行操作

运行应用程序后,必须删除两条请求消息 (每个重载过程) 一条到 FILE 接收位置。 请求消息的架构必须符合前面生成的过程的架构。 有关使用 Oracle 数据库适配器调用函数的请求消息架构的详细信息,请参阅 函数的消息架构和过程

例如,调用GET_ACCOUNT过程的第一个重载的请求消息为:

<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1">  
  <AID>100001</AID>  
</GET_ACCOUNT>  

同样,调用GET_ACCOUNT过程的第二个重载的请求消息为:

<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload2">  
  <ANAME>Mindy Martin</ANAME>  
</GET_ACCOUNT>  

第一个请求消息调用GET_ACCOUNT过程以检索帐户 ID 等于 100020 的记录。 第二个请求消息调用GET_ACCOUNT过程,以检索帐户名称为“John Smith”的记录。

业务流程使用请求消息并将其发送到 Oracle 数据库。 来自 Oracle 数据库的响应保存在定义为业务流程一部分的其他 FILE 位置。 例如,调用第一个重载过程的响应为:

<?xml version="1.0" encoding="utf-8"?>  
<GET_ACCOUNTResponse mlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1">  
 <ACCT>  
  <ACCTID>100001</ACCTID>  
  <NAME>Ty Carlson</NAME>  
  <BALANCE>9000</BALANCE>  
 </ACCT>  
</GET_ACCOUNTResponse>  

可能的异常

有关在使用 BizTalk Server 调用重载包时可能遇到的异常的信息,请参阅异常和错误处理

最佳实践

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

另请参阅

使用 Oracle 数据库开发 BizTalk 应用程序的构建基块