Freigeben über


Übersicht über das WCF-Kanalmodell mit dem Oracle Database-Adapter

Zum Aufrufen von Vorgängen für den Microsoft BizTalk-Adapter für Oracle-Datenbank fungiert Ihr Code als WCF-Client und sendet ausgehende Vorgänge an den Adapter. Im WCF-Kanalmodell ruft Ihr Code Vorgänge für den Adapter auf, indem eine Anforderungsnachricht über einen Kanal gesendet wird.

Um eingehende Vorgänge aufzurufen, z. B. das Empfangen von abrufbasierten datenveränderten Nachrichten mithilfe des vom Adapter bereitgestellten POLLINGSTMT-Vorgangs, fungiert Ihr Code als WCF-Dienst und empfängt den eingehenden Vorgang vom Adapter. Anders ausgedrückt: Ihr Code empfängt eine Anforderungsnachricht vom Adapter über einen Kanal.

Die Themen in diesem Abschnitt bieten eine Übersicht über die Verwendung des Oracle Database-Adapters mit dem WCF-Kanalmodell.

Übersicht über das WCF-Kanalmodell

Clients und Dienste kommunizieren durch den Austausch von SOAP-Nachrichten. Das WCF-Kanalmodell ist eine Abstraktion dieses Nachrichtenaustauschs auf niedriger Ebene. Es bietet Schnittstellen und Typen, mit denen Sie Nachrichten mithilfe eines mehrschichtigen Protokollstapels namens Kanalstapel senden und empfangen können. Jede Schicht des Stapels besteht aus einem Kanal, und jeder Kanal wird aus einer WCF-Bindung erstellt. Auf der niedrigsten Ebene befindet sich der Transportkanal. Der Transportkanal implementiert den zugrunde liegenden Transportmechanismus zwischen einem Dienst und einem Client und stellt jede Nachricht den höheren Ebenen (und letztendlich der verbrauchenden Anwendung) als System.ServiceModel.Message dar. Die WCF Message-Klasse ist eine Abstraktion einer SOAP-Nachricht. WCF stellt mehrere Kanalschnittstellen bereit, die als Kanalformen bezeichnet werden und die die grundlegenden SOAP-Nachrichtenaustauschmuster modellieren, z. B. Anforderungsantwort oder Unidirektionale. Eine WCF-Transportbindung stellt eine Implementierung von mindestens einer Kanalform bereit, die höhere Ebenen zum Senden und Empfangen von Nachrichten verwenden können. Weitere Informationen zum WCF-Kanalmodell finden Sie unter Übersicht über das Kanalmodell.

Der Oracle Database-Adapter ist eine benutzerdefinierte WCF-Transportbindung, die eine Oracle-Datenbank als WCF-Dienst verfügbar macht.

Unterstützte Kanalformen für den Oracle-Datenbankadapter

Der Adapter implementiert die folgenden WCF-Kanalformen:

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel). Die IRequestChannel-Schnittstelle implementiert die Clientseite eines Nachrichtenaustauschs zwischen Anforderung und Antwort. Sie können einen IRequestChannel verwenden, um Vorgänge auszuführen, für die Sie eine Antwort nutzen möchten, z. B. zum Ausführen einer SELECT-Abfrage für eine Oracle-Tabelle.

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Dieses Shape implementiert die Clientseite eines unidirektionalen Nachrichtenaustauschs. Sie können einen IOutputChannel verwenden, um einen Vorgang aufzurufen, für den Sie keine Antwort verwenden müssen, z. B. um eine Oracle-Prozedur ohne OUT-Parameter aufzurufen.

    Wichtig

    Alle zugrunde liegenden Aufrufe des Adapters für den Oracle-Client sind synchron. Dies umfasst Aufrufe des Oracle-Clients, die das Ergebnis von Vorgängen sind, die über einen IOutputChannel aufgerufen werden. Wenn Sie einen IOutputChannel verwenden, verwirft der Adapter die vom Oracle-Client empfangene Antwort.

  • IInputChannel (System.ServiceModel.Channels.IInputChannel). Dieses Shape implementiert die Dienstseite eines unidirektionalen Nachrichtenaustauschs. Sie verwenden einen IInputChannel , um Nachrichten für eingehende Vorgänge vom Adapter zu empfangen.

    Wie jede WCF-Bindung verwendet auch der Oracle Database-Adapter ein Factorymuster, um Kanäle für Anwendungscode bereitzustellen. Sie verwenden ein Microsoft.Adapters.OracleDBBinding-Objekt , um Instanzen von zu erstellen:

  • System.ServiceModel.ChannelFactory<IRequestChannel> zum Bereitstellen von IRequestChannel-Kanälen , die Sie zum Aufrufen von Anforderungsantwortvorgängen auf dem Adapter verwenden können.

  • System.ServiceModel.ChannelFactory<IOutputChannel> zum Bereitstellen von IOutputChannel-Kanälen , mit denen Sie unidirektionale Vorgänge für den Adapter aufrufen können.

  • System.ServiceModel.IChannelListener<IInputChannel> zum Bereitstellen von IInputChannel-Kanälen , die Sie zum Empfangen eingehender Nachrichten (z. B. POLLINGSTMT-Vorgang) vom Adapter verwenden können.

Erstellen von Nachrichten für den Oracle-Datenbankadapter im WCF-Kanalmodell

In WCF stellt die System.ServiceModel.Channels.Message-Klasse eine Im-Arbeitsspeicher-Darstellung einer SOAP-Nachricht bereit. Sie erstellen eine Nachricht instance, indem Sie die statische Message.Create-Methode aufrufen.

Es gibt zwei wichtige Teile der SOAP-Nachricht, die Sie angeben müssen, wenn Sie eine Nachricht erstellen, instance an den Oracle Database-Adapter gesendet werden soll.

  • Die Nachrichtenaktion ist eine Zeichenfolge, die Teil des SOAP-Nachrichtenheaders ist. Die Meldungsaktion identifiziert den Vorgang, der in der Oracle-Datenbank aufgerufen werden soll. Im Folgenden wird die Meldungsaktion angezeigt, die angegeben wird, um den Select-Vorgang in der Tabelle /SCOTT/EMP aufzurufen: http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select.

  • Der Nachrichtentext enthält die Parameterdaten für den Vorgang. Der Nachrichtentext besteht aus wohlgeformten XML-Daten, die dem Nachrichtenschema entsprechen, das vom Oracle Database-Adapter für den angeforderten Vorgang erwartet wird. Der folgende Nachrichtentext gibt einen Select-Vorgang auf dem SCOTT an. EMP-Tabelle (SELECT * FROM EMP).

    <?xml version="1.0" encoding="utf-8" ?>  
    <Select xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP">  
        <COLUMN_NAMES>*</COLUMN_NAMES>  
    </Select>  
    

    Informationen zu den Nachrichtenschemas des Oracle Database-Adapters und zu Nachrichtenaktionen für Vorgänge finden Sie unter Nachrichten und Nachrichtenschemas für BizTalk Adapter for Oracle Database.

    Diese Create-Methode ist überladen und bietet viele verschiedene Optionen zum Bereitstellen des Nachrichtentexts. Der folgende Code zeigt, wie Sie eine Nachricht instance erstellen, indem Sie einen XmlReader verwenden, um den Nachrichtentext anzugeben. In diesem Code wird der Nachrichtentext aus einer Datei gelesen.

XmlReader readerIn = XmlReader.Create("SelectAllActivity.xml");  
Message messageIn = Message.CreateMessage(MessageVersion.Default,  
    "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select",  
    readerIn);  

Wichtig

Sie müssen eine Nachrichtenaktion in Ihrer Nachricht instance bereitstellen. Dies geschieht in der Regel, wenn die nachricht instance erstellt wird.

Streamingunterstützung für LOB-Datentypen im WCF-Kanalmodell

End-to-End-Streaming von LOB-Datentypen wird für einige Vorgänge unterstützt, die vom Adapter angezeigt werden. Bei diesen Vorgängen bestimmt die Erstellung und Nutzung der Nachrichten, die Sie über den Kanal senden und empfangen, ob das Streaming für die LOB-Daten unterstützt wird.

Weitere Informationen dazu, wie der Oracle Database-Adapter das Streaming für BRANCHENdaten unterstützt, finden Sie unter Streaming von Datentypen für große Objekte im Oracle Database-Adapter.

Weitere Informationen zum Implementieren des Knoten-Wert-Streamings in Ihrem Code zur Unterstützung des End-to-End-Streamings von LOB-Daten finden Sie unter Streaming von Oracle Database LOB-Datentypen mithilfe des WCF-Kanalmodells.

Weitere Informationen

Entwickeln von Oracle Database-Anwendungen mithilfe des WCF-Kanalmodells