Compartir a través de


Introducción al modelo de canal WCF con el adaptador de base de datos de Oracle

Para invocar operaciones en el adaptador de Microsoft BizTalk para Oracle Database, el código actúa como un cliente WCF y envía operaciones salientes al adaptador. En el modelo de canal WCF, el código invoca las operaciones en el adaptador mediante el envío de un mensaje de solicitud a través de un canal.

Para invocar operaciones entrantes, como recibir mensajes modificados por datos basados en sondeo mediante la operación POLLINGSTMT proporcionada por el adaptador, el código actúa como un servicio WCF y recibe la operación entrante del adaptador. En otras palabras, el código recibe un mensaje de solicitud del adaptador a través de un canal.

Los temas de esta sección proporcionan información general sobre el uso del adaptador de base de datos de Oracle con el modelo de canal WCF.

Información general sobre el modelo de canal WCF

Los clientes y servicios se comunican intercambiando mensajes SOAP. El modelo de canal WCF es una abstracción de bajo nivel de este intercambio de mensajes. Proporciona interfaces y tipos que permiten enviar y recibir mensajes mediante una pila de protocolos en capas denominada pila de canales. Cada capa de la pila se compone de un canal y cada canal se crea a partir de un enlace WCF. En la capa más baja se encuentra el canal de transporte. El canal de transporte implementa el mecanismo de transporte subyacente entre un servicio y un cliente y presenta cada mensaje a las capas superiores (y, en última instancia, la aplicación que consume) como system.ServiceModel.Message. La clase Message de WCF es una abstracción de un mensaje SOAP. WCF proporciona varias interfaces de canal, denominadas formas de canal, que modelan los patrones básicos de intercambio de mensajes SOAP, como solicitud-respuesta o unidireccional. Un enlace de transporte WCF proporciona una implementación de una o varias formas de canal que las capas superiores pueden usar para enviar y recibir mensajes. Para obtener más información sobre el modelo de canal WCF, vea Información general sobre el modelo de canal.

El adaptador de base de datos de Oracle es un enlace de transporte personalizado de WCF que expone una base de datos de Oracle como un servicio WCF.

Formas de canal admitidas para el adaptador de base de datos de Oracle

El adaptador implementa las siguientes formas de canal WCF:

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel). La interfaz IRequestChannel implementa el lado cliente de un intercambio de mensajes de solicitud-respuesta. Puede usar un IRequestChannel para realizar operaciones para las que desea consumir una respuesta, por ejemplo, para realizar una consulta SELECT en una tabla de Oracle.

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Esta forma implementa el lado cliente de un intercambio de mensajes unidireccional. Puede usar un IOutputChannel para invocar una operación para la que no necesite consumir una respuesta, por ejemplo, para llamar a un procedimiento de Oracle que no tenga parámetros OUT.

    Importante

    Todas las llamadas subyacentes del adaptador al cliente de Oracle son sincrónicas. Esto incluye llamadas al cliente de Oracle que son el resultado de las operaciones invocadas a través de IOutputChannel. Cuando se usa un IOutputChannel, el adaptador descarta la respuesta recibida del cliente de Oracle.

  • IInputChannel (System.ServiceModel.Channels.IInputChannel). Esta forma implementa el lado de servicio de un intercambio de mensajes unidireccional. Use un IInputChannel para recibir mensajes para las operaciones entrantes del adaptador.

    Al igual que cualquier enlace WCF, el adaptador de base de datos de Oracle usa un patrón de fábrica para proporcionar canales al código de la aplicación. Se usa un objeto Microsoft.Adapters.OracleDBBinding para crear instancias de:

  • System.ServiceModel.ChannelFactory<IRequestChannel para proporcionar canales IRequestChannel> que puede usar para invocar operaciones de solicitud-respuesta en el adaptador.

  • System.ServiceModel.ChannelFactory<IOutputChannel para proporcionar canales IOutputChannel> que puede usar para invocar operaciones unidireccionales en el adaptador.

  • System.ServiceModel.IChannelListener<IInputChannel para proporcionar canales IInputChannel> que puede usar para recibir mensajes entrantes (por ejemplo, operación POLLINGSTMT) del adaptador.

Crear mensajes para el adaptador de base de datos de Oracle en el modelo de canal WCF

En WCF, la clase System.ServiceModel.Channels.Message proporciona una representación en memoria de un mensaje SOAP. Para crear una instancia de Message , invoque el método estático Message.Create .

Hay dos partes importantes para el mensaje SOAP que debe especificar al crear una instancia de mensaje para enviar al adaptador de base de datos de Oracle.

  • La acción del mensaje es una cadena que forma parte del encabezado del mensaje SOAP. La acción de mensaje identifica la operación que se debe invocar en la base de datos de Oracle. A continuación se muestra la acción de mensaje especificada para invocar la operación Select en la tabla /SCOTT/EMP: http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select.

  • El cuerpo del mensaje contiene los datos de parámetro de la operación. El cuerpo del mensaje se compone de XML con formato correcto que corresponde al esquema de mensajes esperado por el adaptador de base de datos de Oracle para la operación solicitada. El cuerpo del mensaje siguiente especifica una operación Select en SCOTT. Tabla 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>  
    

    Para obtener información sobre los esquemas de mensajes del adaptador de base de datos de Oracle y las acciones de mensajes para las operaciones, vea Messages and Message Schemas for BizTalk Adapter for Oracle Database.

    Este método Create está sobrecargado y ofrece muchas opciones diferentes para proporcionar el cuerpo del mensaje. En el código siguiente se muestra cómo crear una instancia de Message mediante xmlReader para proporcionar el cuerpo del mensaje. En este código, el cuerpo del mensaje se lee de un archivo.

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

Importante

Debe proporcionar una acción de mensaje en la instancia de Message . Normalmente, esto se hace cuando se crea la instancia de Message .

Compatibilidad de streaming con tipos de datos LOB en el modelo de canal WCF

El adaptador admite el streaming de un extremo a otro de los tipos de datos LOB para algunas operaciones expuestas por el adaptador. Para estas operaciones, cómo crear y consumir los mensajes que envía y recibe a través del canal determina si el streaming se admite en los datos de LOB.

Para obtener más información sobre cómo el adaptador de base de datos de Oracle admite el streaming en datos loB, consulte Streaming de tipos de datos de objetos grandes en el adaptador de base de datos de Oracle.

Para obtener más información sobre la implementación de streaming de valores de nodo en el código para admitir el streaming de un extremo a otro de los datos LOB, vea Streaming de tipos de datos lob de base de datos de Oracle mediante el modelo de canal WCF.

Consulte también

Desarrollo de aplicaciones de Oracle Database mediante el modelo de canal WCF