存储过程和函数可以在 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”,依此类推。
如何调用重载的函数和过程?
使用 Oracle 数据库 适配器与 BizTalk Server 对 Oracle 数据库进行操作时,涉及到在 构建块中所述的开发 BizTalk 应用程序的步骤和过程任务。 若要在 Oracle 数据库中调用函数,这些任务包括:
创建 BizTalk 项目并为要在 Oracle 数据库中调用的重载函数生成架构。
在 BizTalk 项目中创建消息,以便从 Oracle 数据库发送和接收消息。 必须为每个重载创建消息。
创建编排以调用 Oracle 数据库中的重载函数。
生成和部署 BizTalk 项目。
通过创建物理发送和接收端口来配置 BizTalk 应用程序。
启动 BizTalk 应用程序。
本主题提供执行这些任务的说明。
基于本主题的示例
基于本主题的示例 InvokeOverloadedProc 也随 BizTalk 适配器包一起提供。 有关详细信息,请参阅 适配器示例。
生成架构
在本主题中,为了演示如何调用重载的函数或过程,我们将在 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 数据库作业提取元数据 。
定义消息和消息类型
前面生成的架构描述了业务流程中消息所需的“类型”。 消息通常是变量,类型由相应的架构定义。 必须将在第一步中生成的架构链接到 BizTalk 项目的业务流程视图窗口中的消息。
对于本主题,必须创建两个请求-响应消息集—第一个重载过程的一个请求-响应集,第二个重载过程的第二个请求-响应集。
执行以下步骤以创建消息并将其链接到架构。
创建消息并链接到架构
打开 BizTalk 项目的“业务流程视图”窗口(如果尚未打开)。 为此,请单击“ 视图”,指向 “其他窗口”,然后单击“ 业务流程视图”。
在业务流程视图中,右键单击 “消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下作:
用这个 要执行的操作 标识符 键入 请求。 消息类型 从下拉列表中,展开 “架构”,然后选择 InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNT,其中 InvokeOverloadedProc 是 BizTalk 项目的名称。 OracleDBBindingSchema 是为GET_ACCOUNT过程生成的架构。 重复上一步,再创建三条消息。 在新消息的 “属性 ”窗格中,执行以下作:
将标识符设置为 将消息类型设置为 响应 InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNTResponse Request2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNT 回复2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNTResponse
设置业务流程
必须创建 BizTalk 业务流程才能使用 BizTalk Server 在 Oracle 数据库中调用重载的过程。 在此协调流程中,您会在指定的接收位置放置两条请求消息,分别对应于两个不同的重载过程。 Oracle 数据库适配器使用消息,并通过 ODP 将其传递到 Oracle 数据库。 Oracle 数据库的响应将保存到另一个位置。
由于业务流程自动同时选择两个请求,因此需要在业务流程中包含并行操作形状。 对于每个并行操作,必须包含发送和接收形状,以便将消息发送到 Oracle 数据库并接收响应。 但是,可以使用相同的端口来发送和接收这两种操作的消息。 同时调用重载过程的典型编排将包含:
发送和接收形状以将消息发送到 Oracle 数据库并接收响应。
用于接收要发送到 Oracle 数据库的请求消息的单向接收端口。
双向发送端口,用于将请求消息发送到 Oracle 数据库并接收响应。
单向发送端口,用于将响应从 Oracle 数据库发送到文件夹。
GET_ACCOUNT过程的第一个和第二个重载调用的示例编排如下所示:
添加消息形状
请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是消息形状的名称,如上述编排中所显示。 下表列出了一个并行操作中必须包含的形状。
形状 | 形状类型 | 性能 |
---|---|---|
接收消息 | 接收 | - 将 名称 设置为 ReceiveMessage - 将 “激活 ”设置为 True |
发送消息 | 发送 | - 将 名称 设置为 SendMessage |
接收响应 | 接收 | - 将 名称 设置为 ReceiveResponse - 将 “激活 ”设置为 False |
SendResponse | 发送 | - 将 名称 设置为 SendResponse |
下表列出了其他并行操作中必须包括的形状。
形状 | 形状类型 | 性能 |
---|---|---|
接收消息2 | 接收 | - 将 Name 设置为 ReceiveMessage2 - 将 “激活 ”设置为 True |
SendMessage2 | 发送 | - 将 名称 设置为 SendMessage2 |
ReceiveResponse2 | 接收 | - 将 名称 设置为 ReceiveResponse2 - 将 “激活 ”设置为 False |
SendResponse2 | 发送 | - 将 名称 设置为 SendResponse2 |
添加端口
请确保为每个逻辑端口指定以下属性。 端口列中列出的名称是在编排中显示的端口的名称。
港口 | 性能 |
---|---|
FileIn | - 将 标识符 设置为 FileIn - 将 类型 设置为 FileInType - 将 通信模式 设置为 单向 - 将通信方向设置为接收 |
LOBPort | - 将 标识符 设置为 LOBPort - 将 类型 设置为 LOBPortType - 将 通信模式 设置为 请求-响应 - 将 通信方向 设置为 发送接收 |
保存响应 | - 将 标识符 设置为 SaveResponse - 将 类型 设置为 SaveResponseType - 将 通信模式 设置为 单向 - 将通信方向设置为发送 |
由于你将使用这些端口处理两个请求和响应消息,因此必须为每个端口创建两个作,其中每个作对应于一个消息类型。 要创建操作,请右键单击端口形状,然后选择“新建操作”。 将每个端口的第一个作命名为 Overload1 ,将每个端口的第二个作命名为 Overload2。
使用相关性
关联是将传入消息与业务流程的相应实例匹配的过程。 在编排过程中,您将丢弃两条请求消息,每个过载情况各一条。 使用关联,可将请求消息与正确的业务流程相关联。 有关相关性的详细信息,请参阅 在业务流程中使用相关性。
使用相关性
从为每个重载函数生成的架构提升属性。 例如,从第一个重载的架构提升 AID 属性;从第二个重载的架构提升 ANAME 属性。 若要提升属性,请在架构视图中右键单击该属性,指向 “提升”,然后选择“ 快速升级”。 这会向 BizTalk 项目添加 PropertySchema.xsd 文件。
有关提升属性的信息,请参阅 “提升属性”。
在业务流程视图中,右键单击 “关联类型”,然后选择“ 新建关联类型”。
“ 关联属性 ”对话框列出了在步骤 1 中提升的属性。 选择属性,然后单击“ 添加”。
单击 “确定” 。
若要为其他提升的属性创建相关类型,请重复这些步骤。
根据关联类型的属性重命名相关类型。 可以将相关类型重命名为 CorrelationType_AID (对于 AID 属性)和 CorrelationType_ANAME (对于 ANAME 属性)。
在业务流程视图中,右键单击 相关集,然后选择 “新建关联集”。
右键单击新添加的关联集,然后单击“ 属性”。 在“属性”窗格中,执行以下操作:
用这个 要执行的操作 相关类型 InvokeOverloadedProc.CorrelationType_AID 标识符 Correlation_AID 添加另一个关联集,并从“属性”窗格中指定以下属性。
用这个 要执行的操作 相关类型 InvokeOverloadedProc.CorrelationType_ANAME 标识符 Correlation_ANAME
指定动作形状的消息,并将其连接到端口
下表列出了为操作形状指定消息及将消息链接到端口时需要设置的属性及其值。 Shape 列中列出的名称是前文提到的业务编排中显示的消息形状的名称。
形状 | 性能 |
---|---|
接收消息 | - 将 初始化相关集 设置为 Correlation_AID - 将 消息 设置为 请求 - 将 操作 设置为 FileIn.Overload1.Request |
发送消息 | - 将 消息 设置为 请求 - 将 操作 设置为 LOBPort.Overload1.Request |
接收响应 | - 将 消息 设置为 响应 - 将 操作 设置为 LOBPort.Overload1.Response |
SendResponse | - 将 消息 设置为 响应 - 将 操作 设置为 SaveResponse.Overload1.Request |
接收消息2 | - 将 初始化关联集 设置为 Correlation_ANAME - 将 消息 设置为 Request2 - 将 Operation 设置为 FileIn.Overload2.Request |
SendMessage2 | - 将 消息 设置为 Request2 - 将 操作 设置为 LOBPort.Overload2.Request |
ReceiveResponse2 | - 将 消息 设置为 Response2 - 将 操作 设置为 LOBPort.Overload2.Response |
SendResponse2 | - 将 消息 设置为 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 发送端口正在运行。
WCF-Custom 或 WCF-OracleDB 发送消息到 Oracle 数据库的端口正在运行。
正在运行该操作的 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 数据库适配器绑定。