Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Las operaciones de invocación (operaciones salientes) se invocan mediante IRequestChannel o IOutputChannel para enviar mensajes al adaptador.
Usted recibe mensajes de cambio de datos basados en sondeo al recibir mensajes POLLINGSTMT a través de 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 creas un System.ServiceModel.ChannelFactory utilizando la interfaz adecuada. A continuación, use la fábrica 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
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.
Proporcione las credenciales de Oracle para el generador de canales mediante la propiedad Credentials .
Abra el generador de canales.
Obtenga una instancia del canal invocando el método CreateChannel en el generador de canales.
Abra el canal.
Puede especificar la dirección de enlace y 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, excepto que debe especificar una interfaz IOutputChannel para el ChannelFactory y el tipo de canal.
// 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 la vinculación 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();
Las opciones de configuración
En el código siguiente se muestran las opciones de configuración usadas 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" en función del 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)
Configuras el adaptador de Oracle Database para sondear las tablas y vistas de la base de datos Oracle configurando propiedades de vinculación 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 mensajes de las operaciones entrantes del adaptador.
Para crear y abrir un IInputChannel para recibir mensajes de operaciones entrantes
Cree una instancia de OracleDBBinding.
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.
Cree una colección de parámetros de enlace mediante la clase BindingParameterCollection y establezca las credenciales.
Cree un agente de escucha de canal invocando el método BuildChannelListener<IInputChannel> en OracleDBBinding. Especifique el URI de conexión de Oracle como uno de los parámetros para 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.
Abra el agente de escucha.
Obtenga un canal IInputChannel invocando el método AcceptChannel en el agente de escucha.
Abra el canal.
En el código siguiente se muestra cómo crear un agente de escucha de canal y obtener un IInputChannel para recibir mensajes entrantes del adaptador utilizando la operación POLLINGSTMT.
Nota:
El adaptador de base de datos de Oracle 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();
Véase también
Desarrollo de aplicaciones de base de datos de Oracle mediante el modelo de canal WCF