Condividi tramite


Creare un canale con Oracle Database

Nel modello di canale WCF richiamare le operazioni sul database Oracle e ricevere i risultati di una query di polling scambiando messaggi SOAP con l'adapter Microsoft BizTalk per Oracle Database tramite un canale WCF.

  • È possibile richiamare le operazioni (operazioni in uscita) usando IRequestChannel o IOutputChannel per inviare messaggi all'adapter.

  • Si ricevono messaggi di modifica dei dati basati sul polling ricevendo messaggi POLLINGSTMT su un IInputChannel.

    Negli argomenti di questa sezione vengono fornite informazioni su come creare e configurare forme di canale usate per le operazioni in ingresso e in uscita.

Creazione di canali in uscita (client)

È possibile usare IRequestChannel o IOutputChannel per richiamare le operazioni nel database Oracle. In entrambi i casi, creare prima di tutto system.ServiceModel.ChannelFactory usando l'interfaccia appropriata. Usare quindi la factory per creare il canale. Dopo aver creato il canale, è possibile usarlo per richiamare le operazioni sull'adapter.

Per creare e aprire un canale in uscita

  1. Creare e inizializzare un'istanza di ChannelFactory per la forma del canale desiderata usando un endpoint e un'associazione. L'endpoint specifica un URI di connessione Oracle e l'associazione è un'istanza di OracleDBBinding.

  2. Specificare le credenziali Oracle per la channel factory usando la proprietà Credentials .

  3. Aprire la channel factory.

  4. Ottenere un'istanza del canale richiamando il metodo CreateChannel nella channel factory.

  5. Aprire il canale.

    È possibile specificare l'associazione e l'indirizzo dell'endpoint nel codice o dalla configurazione.

Specifica dell'associazione e dell'indirizzo dell'endpoint nel codice

Nell'esempio di codice seguente viene illustrato come creare un IRequestChannel specificando l'associazione e l'indirizzo dell'endpoint nel codice. Il codice per creare un IOutputChannel è lo stesso, ad eccezione del fatto che è necessario specificare un'interfaccia IOutputChannel per ChannelFactory e il tipo di canale.

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

Specifica dell'associazione e dell'indirizzo dell'endpoint nella configurazione

Nell'esempio di codice seguente viene illustrato come creare una channel factory da un endpoint client specificato nella configurazione.

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

Impostazioni di configurazione

Il codice seguente illustra le impostazioni di configurazione usate per l'esempio precedente. Il contratto per l'endpoint client deve essere "System.ServiceModel.Channels.IRequestChannel" o "System.ServiceModel.Channels.IRequestChannel" a seconda del tipo di forma del canale che si desidera creare.

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

Creazione di canali in ingresso (servizio)

È possibile configurare l'adattatore Oracle Database per eseguire il polling delle tabelle e delle viste del database Oracle impostando le proprietà di associazione in un'istanza di OracleDBBinding. Usare quindi questa associazione per creare un listener del canale da cui è possibile ottenere un canale IInputChannel per ricevere il messaggio per le operazioni in ingresso dall'adapter.

Per creare e aprire un IInputChannel per ricevere messaggi per le operazioni in ingresso
  1. Creare un'istanza di OracleDBBinding.

  2. Impostare le proprietà di associazione necessarie per l'operazione in ingresso. Ad esempio, per l'operazione POLLINGSTMT, è necessario impostare almeno le proprietà di associazione InboundOperationType, PollingStatement e PollingInterval per configurare l'adapter Oracle Database per eseguire il polling del database Oracle.

  3. Creare una raccolta di parametri di associazione usando la classe BindingParameterCollection e impostare le credenziali.

  4. Creare un listener di canale richiamando il metodo IInputChannelListener<> inOracleDBBinding. Specificare l'URI di connessione Oracle come uno dei parametri per questo metodo. Per altre informazioni sull'URI di connessione Oracle, vedere Creare l'URI di connessione di Oracle Database.

  5. Aprire il listener.

  6. Ottenere un canale IInputChannel richiamando il metodo AcceptChannel nel listener.

  7. Aprire il canale.

    Il codice seguente illustra come creare un listener del canale e ottenere un IInputChannel ai messaggi in ingresso dall'adapter usando l'operazione POLLINGSTMT.

Nota

L'adapter Oracle Database supporta solo la ricezione unidirezionale. È quindi necessario usare IInputChannel per ricevere messaggi per le operazioni in ingresso dal database 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();  

Vedere anche

Sviluppare applicazioni Oracle Database usando il modello di canale WCF