Teilen über


Erstellen eines Kanals mithilfe von Oracle Database

Im WCF-Kanalmodell rufen Sie Vorgänge für die Oracle-Datenbank auf und erhalten die Ergebnisse einer Abfrage, indem Sie SOAP-Nachrichten mit dem Microsoft BizTalk-Adapter für Oracle-Datenbank über einen WCF-Kanal austauschen.

  • Sie rufen Vorgänge (ausgehende Vorgänge) auf, indem Sie entweder einen IRequestChannel oder einen IOutputChannel verwenden, um Nachrichten an den Adapter zu senden.

  • Sie erhalten abfragebasierte datenveränderte Nachrichten, indem Sie POLLINGSTMT-Nachrichten über einen IInputChannel empfangen.

    Die Themen in diesem Abschnitt enthalten Informationen zum Erstellen und Konfigurieren von Kanalformen, die für eingehende und ausgehende Vorgänge verwendet werden.

Erstellen ausgehender Kanäle (Clientkanäle)

Sie können entweder einen IRequestChannel oder einen IOutputChannel verwenden, um Vorgänge für die Oracle-Datenbank aufzurufen. In beiden Fällen erstellen Sie zunächst eine System.ServiceModel.ChannelFactory mithilfe der entsprechenden Schnittstelle. Anschließend verwenden Sie die Factory, um den Kanal zu erstellen. Nachdem Sie den Kanal erstellt haben, können Sie ihn verwenden, um Vorgänge für den Adapter aufzurufen.

So erstellen und öffnen Sie einen ausgehenden Kanal

  1. Erstellen und initialisieren Sie eine instance von ChannelFactory für die gewünschte Kanalform, indem Sie einen Endpunkt und eine Bindung verwenden. Der Endpunkt gibt einen Oracle-Verbindungs-URI an, und die Bindung ist eine instance von OracleDBBinding.

  2. Geben Sie oracle-Anmeldeinformationen für die Kanalfactory mithilfe der Credentials-Eigenschaft an .

  3. Öffnen Sie die Kanalfactory.

  4. Rufen Sie eine instance des Kanals ab, indem Sie die CreateChannel-Methode in der Kanalfactory aufrufen.

  5. Öffnen Sie den Kanal.

    Sie können die Bindungs- und Endpunktadresse in Ihrem Code oder aus der Konfiguration angeben.

Angeben der Bindungs- und Endpunktadresse im Code

Im folgenden Codebeispiel wird gezeigt, wie Sie einen IRequestChannel erstellen, indem Sie die Bindungs- und Endpunktadresse im Code angeben. Der Code zum Erstellen eines IOutputChannel ist identisch, mit dem Unterschied, dass Sie eine IOutputChannel-Schnittstelle für die ChannelFactory und den Kanaltyp angeben müssen.

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

Angeben der Bindungs- und Endpunktadresse in der Konfiguration

Im folgenden Codebeispiel wird gezeigt, wie sie eine Kanalfactory aus einem Clientendpunkt erstellen, der in der Konfiguration angegeben ist.

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

Die Konfigurationseinstellungen

Der folgende Code zeigt die Konfigurationseinstellungen, die für das vorherige Beispiel verwendet wurden. Der Vertrag für den Clientendpunkt muss "System.ServiceModel.Channels.IRequestChannel" oder "System.ServiceModel.Channels.IRequestChannel" lauten, je nachdem, welche Kanalform Sie erstellen möchten.

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

Erstellen eingehender Kanäle (Dienst)

Sie konfigurieren den Oracle Database-Adapter zum Abfragen der Oracle-Datenbanktabellen und -ansichten, indem Sie Bindungseigenschaften für eine instance von OracleDBBinding festlegen. Anschließend verwenden Sie diese Bindung, um einen Kanallistener zu erstellen, über den Sie einen IInputChannel-Kanal abrufen können, um Nachrichten für eingehende Vorgänge vom Adapter zu empfangen.

So erstellen und öffnen Sie einen IInputChannel zum Empfangen von Nachrichten für eingehende Vorgänge
  1. Erstellen Sie eine instance von OracleDBBinding.

  2. Legen Sie die bindungseigenschaften fest, die für den eingehenden Vorgang erforderlich sind. Für den POLLINGSTMT-Vorgang müssen Sie beispielsweise mindestens die Bindungseigenschaften InboundOperationType, PollingStatement und PollingInterval festlegen, um den Oracle Database-Adapter zum Abfragen der Oracle-Datenbank zu konfigurieren.

  3. Erstellen Sie eine Bindungsparameterauflistung mithilfe der BindingParameterCollection-Klasse , und legen Sie die Anmeldeinformationen fest.

  4. Erstellen Sie einen Kanallistener, indem Sie die BuildChannelListener<IInputChannel-Methode> für OracleDBBinding aufrufen. Sie geben den Oracle-Verbindungs-URI als einen der Parameter für diese Methode an. Weitere Informationen zum Oracle-Verbindungs-URI finden Sie unter Erstellen des Oracle Database-Verbindungs-URI.

  5. Öffnen Sie den Listener.

  6. Rufen Sie einen IInputChannel-Kanal ab, indem Sie die AcceptChannel-Methode im Listener aufrufen.

  7. Öffnen Sie den Kanal.

    Der folgende Code zeigt, wie Sie mithilfe des POLLINGSTMT-Vorgangs einen Kanallistener erstellen und einen IInputChannel für eingehende Nachrichten vom Adapter abrufen.

Hinweis

Der Oracle Database-Adapter unterstützt nur den unidirektionalen Empfang. Daher müssen Sie IInputChannel verwenden, um Nachrichten für eingehende Vorgänge aus der Oracle-Datenbank zu empfangen.

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

Weitere Informationen

Entwickeln von Oracle Database-Anwendungen mithilfe des WCF-Kanalmodells