Share via


Creación de un canal mediante Oracle Database

En el modelo de canal WCF, se invocan operaciones en la base de datos de Oracle y se reciben los resultados de una consulta de sondeo intercambiando mensajes SOAP con el adaptador de Microsoft BizTalk para oracle Database a través de un canal WCF.

  • Se invocan operaciones (operaciones salientes) mediante IRequestChannel o IOutputChannel para enviar mensajes al adaptador.

  • Recibirá mensajes modificados por datos basados en sondeo mediante la recepción de mensajes POLLINGSTMT a través de un IInputChannel.

    Los temas de esta sección proporcionan información sobre cómo crear y configurar formas de canal que se usan para las operaciones entrantes y salientes.

Creación de canales de salida (cliente)

Puede usar IRequestChannel o IOutputChannel para invocar operaciones en la base de datos de Oracle. En cualquier caso, primero se crea un System.ServiceModel.ChannelFactory mediante la interfaz adecuada. A continuación, use el generador para crear el canal. Después de crear el canal, puede usarlo para invocar operaciones en el adaptador.

Para crear y abrir un canal de salida

  1. Cree e inicialice una instancia de ChannelFactory para la forma de canal deseada mediante un punto de conexión y un enlace. El punto de conexión especifica un URI de conexión de Oracle y el enlace es una instancia de OracleDBBinding.

  2. Proporcione las credenciales de Oracle para el generador de canales mediante la propiedad Credentials .

  3. Abra el generador de canales.

  4. Obtenga una instancia del canal invocando el método CreateChannel en el generador de canales.

  5. Abra el canal.

    Puede especificar el enlace y la dirección del punto de conexión en el código o desde la configuración.

Especificar el enlace y la dirección del punto de conexión en el código

En el ejemplo de código siguiente se muestra cómo crear un IRequestChannel especificando el enlace y la dirección del punto de conexión en el código. El código para crear un IOutputChannel es el mismo, salvo que debe especificar una interfaz IOutputChannel para el tipo de canal y ChannelFactory .

// Create binding -- set binding properties before you open the factory.  
OracleDBBinding odbBinding = new OracleDBBinding();  
  
// Create address.  
EndpointAddress odbAddress = new EndpointAddress("oracledb://ADAPTER/");  
  
// Create channel factory from binding and address.  
ChannelFactory<IRequestChannel> factory =   
    new ChannelFactory<IRequestChannel>(odbBinding, odbAddress);  
  
// Specify credentials.   
factory.Credentials.UserName.UserName = "SCOTT";  
factory.Credentials.UserName.Password = "TIGER";  
  
// Open factory  
factory.Open();  
  
// Get channel and open it  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

Especificar el enlace y la dirección del punto de conexión en la configuración

En el ejemplo de código siguiente se muestra cómo crear un generador de canales a partir de un punto de conexión de cliente especificado en la configuración.

// Create channel factory from configuration.  
ChannelFactory<IRequestChannel> factory =  
new ChannelFactory<IRequestChannel>("MyRequestChannel");  
  
// Specify credentials.  
factory.Credentials.UserName.UserName = "SCOTT";  
factory.Credentials.UserName.Password = "TIGER";  
  
// Open the factory.  
factory.Open();  
  
// Get a channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

Opciones de configuración

En el código siguiente se muestran los valores de configuración usados para el ejemplo anterior. El contrato para el punto de conexión de cliente debe ser "System.ServiceModel.Channels.IRequestChannel" o "System.ServiceModel.Channels.IRequestChannel" según el tipo de forma de canal que desee crear.

<?xml version="1.0" encoding="utf-8"?>  
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">  
    <system.serviceModel>  
        <bindings>  
            <oracleDBBinding>  
                <binding name="OracleDBBinding" closeTimeout="00:01:00" openTimeout="00:01:00"  
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" metadataPooling="true"  
                    statementCachePurge="false" statementCacheSize="10" pollingInterval="500"  
                    useOracleConnectionPool="true" minPoolSize="1" maxPoolSize="100"  
                    incrPoolSize="5" decrPoolSize="1" connectionLifetime="0" acceptCredentialsInUri="false"  
                    useAmbientTransaction="true" polledDataAvailableStatement="SELECT 1 FROM DUAL"  
                    pollWhileDataFound="false" notifyOnListenerStart="true" notificationPort="-1"  
                    inboundOperationType="Polling" dataFetchSize="65536" longDatatypeColumnSize="0"  
                    skipNilNodes="true" maxOutputAssociativeArrayElements="32"  
                    enableSafeTyping="false" insertBatchSize="1" useSchemaInNameSpace="true"  
                    enableBizTalkCompatibilityMode="false" enablePerformanceCounters="false" />  
            </oracleDBBinding>  
        </bindings>  
        <client>  
            <endpoint address="oracledb://adapter/" binding="oracleDBBinding"  
                bindingConfiguration="OracleDBBinding" contract="System.ServiceModel.Channels.IRequestChannel"  
                name="MyRequestChannel" />  
        </client>  
    </system.serviceModel>  
</configuration>  

Creación de canales entrantes (servicio)

Configure el adaptador de Oracle Database para sondear las tablas y vistas de base de datos de Oracle estableciendo propiedades de enlace en una instancia de OracleDBBinding. Después, use este enlace para crear un agente de escucha de canal desde el que puede obtener un canal IInputChannel para recibir un mensaje para las operaciones entrantes del adaptador.

Para crear y abrir un IInputChannel para recibir mensajes para las operaciones entrantes
  1. Cree una instancia de OracleDBBinding.

  2. Establezca las propiedades de enlace necesarias para la operación de entrada. Por ejemplo, para la operación POLLINGSTMT, como mínimo, debe establecer las propiedades de enlace InboundOperationType, PollingStatement y PollingInterval para configurar el adaptador de base de datos de Oracle para sondear la base de datos de Oracle.

  3. Cree una colección de parámetros de enlace mediante la clase BindingParameterCollection y establezca las credenciales.

  4. Cree un agente de escucha de canal invocando el método IInputChannel> BuildChannelListener< en OracleDBBinding. Especifique el URI de conexión de Oracle como uno de los parámetros de este método. Para obtener más información sobre el URI de conexión de Oracle, consulte Creación del URI de conexión de Oracle Database.

  5. Abra el agente de escucha.

  6. Obtenga un canal IInputChannel invocando el método AcceptChannel en el agente de escucha.

  7. Abra el canal.

    En el código siguiente se muestra cómo crear un agente de escucha de canal y obtener un IInputChannel para los mensajes entrantes del adaptador mediante la operación POLLINGSTMT.

Nota

El adaptador de Oracle Database solo admite la recepción unidireccional. Por lo tanto, debe usar IInputChannel para recibir mensajes para las operaciones entrantes de la base de datos de Oracle.

// Create a binding: specify the InboundOperationType, PollingInterval (in seconds), the PollingStatement, and  
// the PostPollStatement.  
OracleDBBinding binding = new OracleDBBinding();  
binding.InboundOperationType = InboundOperation.Polling;  
binding.PollingInterval = 30;  
binding.PollingStatement = "SELECT * FROM ACCOUNTACTIVITY FOR UPDATE";  
binding.PostPollStatement = "BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;";  
  
// Create a binding parameter collection and set the credentials  
ClientCredentials credentials = new ClientCredentials();  
credentials.UserName.UserName = "SCOTT";  
credentials.UserName.Password = "TIGER";  
  
BindingParameterCollection bindingParams = new BindingParameterCollection();  
bindingParams.Add(credentials);  
  
// Get a listener from the binding and open it.  
Uri connectionUri = new Uri("oracleDB://ADAPTER");  
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams);  
listener.Open();  
  
// Get a channel from the listener and open it.  
channel = listener.AcceptChannel();  
channel.Open();  

Consulte también

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