使用 Oracle 数据库适配器的 WCF 通道模型概述

若要调用用于 Oracle 数据库的 Microsoft BizTalk 适配器上的操作,代码将充当 WCF 客户端,并将出站操作发送到适配器。 在 WCF 通道模型中,代码通过通道发送请求消息来调用适配器上的操作。

若要调用入站操作,例如使用适配器提供的 POLLINGSTMT 操作接收基于轮询的数据更改消息,代码将充当 WCF 服务,并从适配器接收入站操作。 换句话说,代码通过通道从适配器接收请求消息。

本节中的主题概述了将 Oracle 数据库适配器与 WCF 通道模型配合使用。

WCF 通道模型概述

客户端和服务通过交换 SOAP 消息进行通信。 WCF 通道模型是此消息交换的低级抽象。 它提供接口和类型,使你能够使用称为通道堆栈的分层协议堆栈发送和接收消息。 堆栈的每一层由一个通道组成,每个通道都是从 WCF 绑定创建的。 最低层是传输通道。 传输通道在服务和客户端之间实现基础传输机制,并将每条消息呈现给更高层 (,最终使用的应用程序) 作为 System.ServiceModel.Message。 WCF Message 类是 SOAP 消息的抽象。 WCF 提供了多个通道接口(称为通道形状),这些接口对基本 SOAP 消息交换模式(如请求-答复或单向)进行建模。 WCF 传输绑定提供一个或多个通道形状的实现,较高层可以使用这些形状发送和接收消息。 有关 WCF 通道模型的详细信息,请参阅 通道模型概述

Oracle 数据库适配器是一个 WCF 自定义传输绑定,将 Oracle 数据库公开为 WCF 服务。

Oracle 数据库适配器支持的通道形状

适配器实现以下 WCF 通道形状:

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel) 。 IRequestChannel 接口实现请求-答复消息交换的客户端。 可以使用 IRequestChannel 来执行要对其使用响应的操作,例如,对 Oracle 表执行 SELECT 查询。

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel) 。 此形状实现单向消息交换的客户端。 可以使用 IOutputChannel 调用不需要使用响应的操作,例如调用没有 OUT 参数的 Oracle 过程。

    重要

    适配器对 Oracle 客户端的所有基础调用都是同步的。 这包括对 Oracle 客户端的调用,这些调用是通过 IOutputChannel 调用的操作的结果。 使用 IOutputChannel 时,适配器会放弃从 Oracle 客户端收到的响应。

  • IInputChannel (System.ServiceModel.Channels.IInputChannel) 。 此形状实现单向消息交换的服务端。 使用 IInputChannel 从适配器接收入站操作的消息。

    与任何 WCF 绑定一样,Oracle 数据库适配器使用工厂模式向应用程序代码提供通道。 使用 Microsoft.Adapters.OracleDBBinding 对象创建以下项的实例:

  • System.ServiceModel.ChannelFactory<IRequestChannel> 提供 IRequestChannel 通道,可用于在适配器上调用请求-响应操作。

  • System.ServiceModel.ChannelFactory<IOutputChannel> 提供 IOutputChannel 通道,可用于在适配器上调用单向操作。

  • System.ServiceModel.IChannelListener<IInputChannel> 提供 IInputChannel 通道,可用于接收入站消息 (例如,从适配器) POLLINGSTMT 操作。

在 WCF 通道模型中为 Oracle 数据库适配器创建消息

在 WCF 中, System.ServiceModel.Channels.Message 类提供 SOAP 消息的内存中表示形式。 通过调用静态 Message.Create 方法创建 Message 实例。

在创建要发送到 Oracle 数据库适配器的消息实例时,必须指定 SOAP 消息 的两个重要部分。

  • 消息操作是一个字符串,它是 SOAP 消息标头的一部分。 消息操作标识应在 Oracle 数据库上调用的操作。 下面显示了为对 /SCOTT/EMP 表调用 Select 操作而指定的消息操作: http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select

  • 消息正文包含操作的参数数据。 消息正文由格式正确的 XML 组成,这些 XML 对应于 Oracle Database 适配器针对所请求的操作所需的消息架构。 以下消息正文指定 SCOTT 上的 Select 操作。EMP 表 (SELECT * FROM EMP) 。

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

    有关 Oracle 数据库适配器消息架构和操作的消息操作的信息,请参阅 用于 Oracle 数据库的 BizTalk 适配器的消息和消息架构

    Create 方法会重载,并提供许多不同的选项来提供消息正文。 以下代码演示如何通过使用 XmlReader 提供消息正文来创建 Message 实例。 在此代码中,从文件中读取消息正文。

XmlReader readerIn = XmlReader.Create("SelectAllActivity.xml");  
Message messageIn = Message.CreateMessage(MessageVersion.Default,  
    "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select",  
    readerIn);  

重要

必须在 Message 实例中提供 消息 操作。 这通常在创建 Message 实例时完成。

WCF 通道模型中对 LOB 数据类型的流式处理支持

适配器显示的某些操作支持 LOB 数据类型的端到端流式处理。 对于这些操作,如何创建和使用通过通道发送和接收的消息将决定 LOB 数据是否支持流式处理。

有关 Oracle 数据库适配器如何支持对 LOB 数据进行流式处理的详细信息,请参阅 在 Oracle 数据库适配器中流式处理大型对象数据类型

有关在代码中实现节点值流式处理以支持 LOB 数据的端到端流式处理的详细信息,请参阅 使用 WCF 通道模型流式处理 Oracle Database LOB 数据类型

另请参阅

使用 WCF 通道模型开发 Oracle Database 应用程序