Freigeben über


Übersicht über das WCF-Kanalmodell mit dem Oracle-Datenbankadapter

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

Um eingehende Vorgänge aufzurufen, z. B. das Empfangen von abrufbasierten Daten geänderten Nachrichten mithilfe des vom Adapter bereitgestellten POLLINGSTMT-Vorgangs, fungiert Ihr Code als WCF-Dienst und empfängt den eingehenden Vorgang vom Adapter. Mit anderen Worten, 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 auf niedriger Ebene dieses Nachrichtenaustauschs. Sie stellt Schnittstellen und Typen bereit, mit denen Sie Nachrichten mithilfe eines mehrschichtigen Protokollstapels, der als Kanalstapel bezeichnet wird, 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-Nachrichtenklasse ist eine Abstraktion einer SOAP-Nachricht. WCF stellt mehrere Kanalschnittstellen bereit, die als Kanalschemata bezeichnet werden und die grundlegenden SOAP-Nachrichtenaustauschmuster modellieren, wie z. B. Anforderung-Antwort oder Einweg. Eine WCF-Transportbindung stellt eine Implementierung eines oder mehrerer Kanal-Shapes bereit, mit denen höhere Ebenen Nachrichten senden und empfangen 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 Kanal-Formen für den Oracle-Datenbankadapter

Der Adapter implementiert die folgenden WCF-Kanal-Shapes:

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel). Die IRequestChannel-Schnittstelle implementiert die Clientseite eines Anforderungsantwortnachrichtenaustauschs. 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 in einer Oracle-Tabelle.

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Dieses Shape implementiert die Client-Seite 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.

    Von Bedeutung

    Alle zugrunde liegenden Aufrufe des Adapters an den Oracle-Client sind synchron. Dazu gehören Aufrufe an den Oracle-Client, die das Ergebnis von Vorgängen sind, die über einen IOutputChannel aufgerufen werden. Wenn Sie einen IOutputChannel verwenden, verwirft der Adapter die Antwort, die vom Oracle-Client empfangen wurde.

  • 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 der Oracle-Datenbankadapter ein Fabrikmuster, um Kanäle für Anwendungscode bereitzustellen. Sie verwenden ein Microsoft.Adapters.OracleDBBinding-Objekt zum Erstellen von Instanzen von:

  • 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> zur Bereitstellung von IOutputChannel-Kanälen , mit denen Sie unidirektionale Vorgänge auf dem Adapter aufrufen können.

  • System.ServiceModel.IChannelListener<IInputChannel> zur Bereitstellung von IInputChannel-Kanälen , die Sie verwenden können, um eingehende Nachrichten (z. B. POLLINGSTMT-Vorgang) vom Adapter zu empfangen.

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

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

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

  • Die Nachrichtenaktion ist eine Zeichenfolge, die Teil des SOAP-Nachrichtenkopfs ist. Die Nachrichtenaktion identifiziert den Vorgang, der in der Oracle-Datenbank aufgerufen werden soll. Im Folgenden wird die Meldungsaktion zum Aufrufen des Auswahlvorgangs in der Tabelle "/SCOTT/EMP" angegeben: 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 eine Select-Operation auf der SCOTT.EMP-Tabelle an (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 und Nachrichtenaktionen für Vorgänge finden Sie unter Nachrichten- und Nachrichtenschemas für BizTalk Adapter für Oracle Database.

    Diese Create-Methode ist überladen und bietet viele verschiedene Optionen für die Bereitstellung des Nachrichtentexts. Der folgende Code zeigt, wie Eine Nachrichteninstanz mithilfe eines XmlReader-Elements erstellt wird, um den Nachrichtentext bereitstellen zu können. 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);  

Von Bedeutung

Sie müssen eine Nachrichtenaktion in Ihrer Nachrichteninstanz angeben. Dies geschieht in der Regel, wenn die Nachrichteninstanz 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 bereitgestellt werden. Bei diesen Vorgängen hängt es davon ab, wie Sie die Nachrichten erstellen und nutzen, die Sie über den Kanal senden und empfangen, ob Streaming für die LOB-Daten unterstützt wird.

Weitere Informationen dazu, wie der Oracle-Datenbankadapter das Streaming von LOB-Daten unterstützt, finden Sie unter Streamen großer Objektdatentypen im Oracle Database-Adapter.

Weitere Informationen zur Implementierung von Knotenwert-Streaming in Ihrem Code zur Unterstützung des End-to-End-Streamings von LOB-Daten finden Sie unter Streaming Oracle Database LOB Data Types Using the WCF Channel Model.

Siehe auch

Entwickeln von Oracle-Datenbankanwendungen mithilfe des WCF-Kanalmodells