Partager via


Créer un canal à l’aide d’Oracle Database

Dans le modèle de canal WCF, vous appelez des opérations sur la base de données Oracle et recevez les résultats d’une requête d’interrogation en échangeant des messages SOAP avec l’adaptateur Microsoft BizTalk pour Oracle Database sur un canal WCF.

  • Vous appelez des opérations (opérations sortantes) à l’aide d’un IRequestChannel ou d’un IOutputChannel pour envoyer des messages à l’adaptateur.

  • Vous recevez des messages basés sur les modifications de données basées sur l’interrogation en recevant des messages POLLINGSTMT via un IInputChannel.

    Les rubriques de cette section fournissent des informations sur la création et la configuration des formes de canal utilisées pour les opérations entrantes et sortantes.

Création de canaux sortants (client)

Vous pouvez utiliser un IRequestChannel ou un IOutputChannel pour appeler des opérations sur la base de données Oracle. Dans les deux cas, vous créez d’abord un System.ServiceModel.ChannelFactory à l’aide de l’interface appropriée. Vous utilisez ensuite la fabrique pour créer le canal. Après avoir créé le canal, vous pouvez l’utiliser pour appeler des opérations sur l’adaptateur.

Pour créer et ouvrir un canal sortant

  1. Créez et initialisez une instance de ChannelFactory pour la forme de canal souhaitée à l’aide d’un point de terminaison et d’une liaison. Le point de terminaison spécifie un URI de connexion Oracle et la liaison est une instance d’OracleDBBinding.

  2. Fournissez des informations d’identification Oracle pour la fabrique de canaux à l’aide de la propriété Credentials .

  3. Ouvrez la fabrique de canaux.

  4. Obtenez une instance du canal en appelant la méthode CreateChannel sur la fabrique de canaux.

  5. Ouvrez le canal.

    Vous pouvez spécifier la liaison et l’adresse de point de terminaison dans votre code ou à partir de la configuration.

Spécification de la liaison et de l’adresse de point de terminaison dans le code

L’exemple de code suivant montre comment créer un IRequestChannel en spécifiant la liaison et l’adresse de point de terminaison dans le code. Le code permettant de créer un IOutputChannel est le même, sauf que vous devez spécifier une interface IOutputChannel pour le type ChannelFactory et 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();  

Spécification de la liaison et de l’adresse de point de terminaison dans configuration

L’exemple de code suivant montre comment créer une fabrique de canaux à partir d’un point de terminaison client spécifié dans la configuration.

// 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();  

Paramètres de configuration

Le code suivant montre les paramètres de configuration utilisés pour l’exemple précédent. Le contrat du point de terminaison client doit être « System.ServiceModel.Channels.IRequestChannel » ou « System.ServiceModel.Channels.IRequestChannel » en fonction du type de forme de canal que vous souhaitez créer.

<?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>  

Création de canaux entrants (service)

Vous configurez l’adaptateur Oracle Database pour interroger les tables et les vues de base de données Oracle en définissant des propriétés de liaison sur un instance d’OracleDBBinding. Vous utilisez ensuite cette liaison pour créer un écouteur de canal à partir duquel vous pouvez obtenir un canal IInputChannel pour recevoir un message pour les opérations entrantes à partir de l’adaptateur.

Pour créer et ouvrir un IInputChannel pour recevoir des messages pour les opérations entrantes
  1. Créez un instance d’OracleDBBinding.

  2. Définissez les propriétés de liaison requises pour l’opération entrante. Par exemple, pour l’opération POLLINGSTMT, vous devez au minimum définir les propriétés de liaison InboundOperationType, PollingStatement et PollingInterval pour configurer l’adaptateur Oracle Database pour interroger la base de données Oracle.

  3. Créez une collection de paramètres de liaison à l’aide de la classe BindingParameterCollection et définissez les informations d’identification.

  4. Créez un écouteur de canal en appelant la méthode BuildChannelListener<IInputChannel> sur OracleDBBinding. Vous spécifiez l’URI de connexion Oracle comme l’un des paramètres de cette méthode. Pour plus d’informations sur l’URI de connexion Oracle, consultez Créer l’URI de connexion Oracle Database.

  5. Ouvrez l’écouteur.

  6. Obtenez un canal IInputChannel en appelant la méthode AcceptChannel sur l’écouteur.

  7. Ouvrez le canal.

    Le code suivant montre comment créer un écouteur de canal et obtenir un IInputChannel pour les messages entrants de l’adaptateur à l’aide de l’opération POLLINGSTMT.

Notes

L’adaptateur Oracle Database prend uniquement en charge la réception unidirectionnel. Vous devez donc utiliser IInputChannel pour recevoir des messages pour les opérations entrantes à partir d’une base de données 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();  

Voir aussi

Développer des applications Oracle Database à l’aide du modèle de canal WCF