在 Oracle 数据库中对具有大对象数据类型的表执行操作

适用于 Oracle 数据库的 Microsoft BizTalk 适配器为 Oracle 大型对象(LOB)数据类型提供支持:

注释

将 Oracle 数据库适配器与 BizTalk Server 配合使用时,ReadLOB作不支持从 Oracle 数据库流式传输 LOB 类型数据。 若要使用 BizTalk Server 从 Oracle 数据库流式传输 LOB 数据,应使用 Select 操作。 有关流式处理的详细信息,请参阅 Oracle 数据库中 LOB 数据类型的流式处理支持。 此外,Oracle 数据库中针对 ReadLOB作的响应将无法对 WSDL 进行验证。 有关故障的解决方法说明,请参阅 操作问题排查

如何对 LOB 数据执行操作?

使用 Oracle 数据库 适配器与 BizTalk Server 对 Oracle 数据库进行操作时,涉及到在 构建块中所述的开发 BizTalk 应用程序的步骤和过程任务。 若要对 Oracle 数据库中的表调用 ReadLOB 和 UpdateLOB 操作,这些操作步骤包括:

  1. 创建 BizTalk 项目,并为 ReadLOB 和 UpdateLOB 操作生成架构。

  2. 在 BizTalk 项目中创建消息,以便从 Oracle 数据库发送和接收消息。 必须为发送请求和接收响应的两个操作创建消息。

  3. 创建一个编排以便同时调用 ReadLOB 和 UpdateLOB 操作。

  4. 生成和部署 BizTalk 项目。

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

  6. 启动 BizTalk 应用程序。

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

基于本主题的示例

基于本主题的示例Operate_LOB也随 BizTalk 适配器包一起提供。 有关详细信息,请参阅 适配器示例

生成架构

在本主题中,为了演示如何执行 ReadLOB 和 UpdateLOB 操作,我们将为 Oracle 数据库中 SCOTT 架构下的 CUSTOMER 表生成这些操作的元数据。 此表是通过运行示例提供的 SQL 脚本在 SCOTT 架构下创建的。 若要了解有关示例的详细信息,请参阅 架构示例

定义消息和消息类型

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

对于本主题,您必须创建两个请求响应消息集——一个用于 ReadLOB操作,另一个用于 UpdateLOB操作。

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

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

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

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

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

    用这个 要执行的操作
    标识符 键入 请求
    消息类型 从下拉列表中,展开 模式,然后选择 Operate_LOB.OracleDBBindingSchema.ReadLOB 其中 Operate_LOB 是你的 BizTalk 项目的名称。 OracleDBBindingSchema 是为对 CUSTOMER 表进行 ReadLOB 和 UpdateLOB 操作生成的架构。
  5. 重复上一步,再创建三条消息。 在新消息的 “属性 ”窗格中,执行以下作:

    将标识符设置为 将消息类型设置为
    响应 Operate_LOB.OracleDBBindingSchema.ReadLOBResponse
    Request2 Operate_LOB.OracleDBBindingSchema.UpdateLOB
    回复2 Operate_LOB。OracleDBBindingSchema.UpdateLOBResponse

设置业务流程

必须创建一个 BizTalk 业务流程,以使用 BizTalk Server 在表上调用 ReadLOB 和 UpdateLOB 操作。 在此业务流程中,您将放置两条请求消息,一条用于 ReadLOB 的操作,另一条用于 UpdateLOB 的操作。 这些消息将丢弃在接收位置。 Oracle 数据库适配器使用消息,并通过 ODP 将其传递到 Oracle 数据库。 Oracle 数据库的响应将保存到另一个位置。

由于业务流程自动同时选择两个请求,因此需要在业务流程中包含并行操作形状。 对于每个并行操作,必须包括发送和接收组件,以便将消息发送到 Oracle 数据库并接收响应。 但是,可以使用相同的端口来发送和接收这两种操作的消息。 同时执行 ReadLOB 和 UpdateLOB 操作的典型流程编排将包含:

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

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

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

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

    示例编排如下所示:

    用于读取和更新 LOB 数据的编排

添加消息形状

请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是消息形状的名称,如上述编排中所显示。 下表列出了一个并行操作中必须包含的形状。

形状 形状类型 性能
接收消息 接收 - 将 名称 设置为 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
- 将 通信模式 设置为 单向
- 将通信方向设置为发送

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

使用相关性

关联是将传入消息与业务流程的相应实例匹配的过程。 在编排过程中,您将丢弃两条请求消息,每个过载情况各一条。 使用关联,可将请求消息与正确的业务流程相关联。 有关相关性的详细信息,请参阅 在业务流程中使用相关性

使用相关性
  1. 从为每次操作生成的架构中提取属性。 例如,从 ReadLOB 操作架构中提取 LOB_COLUMN 属性,从 UpdateLOB 操作架构中提取 FILTER 属性。 若要提升属性,请在架构视图中右键单击该属性,指向 “提升”,然后选择“ 快速升级”。 这会向 BizTalk 项目添加 PropertySchema.xsd 文件。

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

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

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

  4. 单击 “确定”

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

  6. 根据它们所关联的操作重命名相关类型。 可以将相关性类型重命名为 CorrelationType_ReadLOB (用于 ReadLOB 操作)和 CorrelationType_UpdateLOB (用于 UpdateLOB 操作)。

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

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

    用这个 要执行的操作
    相关类型 Operate_LOB。CorrelationType_ReadLOB
    标识符 Correlation_ReadLOB
  9. 添加另一个关联集,并从“属性”窗格中指定以下属性。

    用这个 要执行的操作
    相关类型 Operate_LOB。CorrelationType_UpdateLOB
    标识符 Correlation_UpdateLOB

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

下表列出了您应设置的属性及其值,以指定用于操作形状的消息并将其链接到端口。 Shape 列中列出的名称是前文提到的业务编排中显示的消息形状的名称。

形状 性能
接收消息 - 将 初始化关联集 设置为 Correlation_ReadLOB
- 将 消息 设置为 请求
- 将 操作 设置为 FileIn.ReadLOB.Request
发送消息 - 将 消息 设置为 请求
- 将 操作 设置为 LOBPort.ReadLOB.Request
接收响应 - 将 消息 设置为 响应
- 将 操作 设置为 LOBPort.ReadLOB.Response
SendResponse - 将 消息 设置为 响应
- 将 操作 设置为 SaveResponse.ReadLOB.Request
接收消息2 - 将 初始化关联集 设置为 Correlation_UpdateLOB
- 将 消息 设置为 Request2
- 将 操作 设置为 FileIn.UpdateLOB.Request
SendMessage2 - 将 消息 设置为 Request2
- 将 操作 设置为 LOBPort.UpdateLOB.Request
ReceiveResponse2 - 将 消息 设置为 Response2
操作 设置为 LOBPort.UpdateLOB.Response
SendResponse2 - 将 消息 设置为 响应
- 将 操作 设置为 SaveResponse.UpdateLOB.Request

指定这些属性后,消息形状符和端口被连接,您的编排已完成。

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

配置 BizTalk 应用程序

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

配置应用程序涉及:

  • 为应用程序选择主机。

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

    • 在硬盘上定义一个位置以及一个相应的文件端口,以便您可以在其中投放请求消息,分别用于 ReadLOB 和 UpdateLOB 操作。 BizTalk 业务流程将使用请求消息并将其发送到 Oracle 数据库。

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

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

      <BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
        <Operation Name="ReadLOB" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER/ReadLOB" />  
        <Operation Name="UpdateLOB" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER/UpdateLOB" />  
      </BtsActionMapping>  
      

      注释

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

启动应用程序

必须启动 BizTalk 应用程序才能对 Oracle 数据库执行操作。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程

在此阶段,请确保:

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

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

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

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

执行操作

运行应用程序后,必须将请求消息投递到 FILE 接收位置。 请求消息的架构必须符合您之前生成的操作的架构。 有关使用 Oracle 数据库适配器对 LOB 数据类型进行操作的请求消息架构的详细信息,请参阅 特殊 LOB 操作的消息架构

编排处理请求消息并将其发送到 Oracle 数据库。 Oracle 数据库的响应保存在定义为业务流程一部分的其他 FILE 位置。

对于此协调,我们首先放置 UpdateLOB 操作的请求消息,用于更新 CUSTOMER 表的 PHOTO 列(BLOB 数据类型)。 调用特定客户的 PHOTO 列更新的请求消息为:

<UpdateLOB xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER">  
  <LOB_COLUMN>PHOTO</LOB_COLUMN>  
  <FILTER>Name='Mindy Martin'</FILTER>  
  <Stream>YWJjZA==</Stream>  
</UpdateLOB>  

注释

筛选器字符串必须始终提取一个匹配行,否则 Oracle 数据库适配器将引发 XmlReaderParsingException。 此外, <Stream> 元素的值必须为 base64Binary 类型。

UpdateLOB操作的响应为:

<?xml version="1.0" encoding="utf-8"?>  
<UpdateLOBResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER"></UpdateLOBResponse>  

现在,我们发送一个ReadLOB操作的请求消息,以读取由UpdateLOB操作更新的数据。 针对特定客户的 PHOTO 列调用 ReadLOB 操作的请求消息为:

<ReadLOB xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER">  
  <LOB_COLUMN>PHOTO</LOB_COLUMN>  
  <FILTER>NAME='Mindy Martin'</FILTER>  
</ReadLOB>  

注释

筛选器字符串必须始终提取一个匹配行。 如果有多个匹配行,Oracle 数据库适配器仅返回第一行(匹配)行的 LOB 列。

ReadLOB操作的响应是:

<?xml version="1.0" encoding="utf-8"?>  
<ReadLOBResponse mlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER">  
  <ReadLOBResult>YWJjZA==</ReadLOBResult>  
</ReadLOBResponse>  

注释

ReadLOB操作的响应可能无法根据 WSDL 进行验证。 您必须执行某些任务才能验证 ReadLOB 与 WSDL 的比对。 有关详细信息,请参阅 排查操作问题

可能的异常

有关在使用 BizTalk Server 对包含 LOB 数据的表执行作时可能会遇到的异常的信息,请参阅 异常和错误处理

最佳做法

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

另请参阅

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