Teilen über


Streaming großer Objektdatentypen im Oracle-Datenbankadapter

Der Microsoft BizTalk-Adapter für Oracle-Datenbank unterstützt das Streaming für Oracle-Datentypen (Large Object, LOB). Mit dem Oracle Database-Adapter werden Vorgänge aufgerufen, und Antworten werden zurückgegeben, indem SOAP-Nachrichten ausgetauscht werden. Ein SOAP-Nachrichtentext besteht aus XML-Knoten.

Es gibt zwei Arten von Nachrichtenstreaming, die vom Adapter unterstützt werden:

  • Knotenstreaming. Beim Knotenstreaming wird jeder Knoten vom Adapter gepuffert, bevor er an die Oracle-Datenbank gesendet (oder an den Client zurückgegeben wird). Dies bedeutet, dass für einen LOB-Datentyp der gesamte Wert in einen Puffer eingelesen wird.

  • Knotenwertstreaming. Beim Knotenwertstreaming kann der tatsächliche Wert des Knotens in Blöcken zwischen der Oracle-Datenbank und dem Client gestreamt werden. Node-Value-Streaming unterstützt End-to-End-Streaming von LOB-Datentypen zwischen dem Adapterclient und der Oracle-Datenbank.

    Beide Streamingmodi basieren auf der Unterstützung für das Knotenstreaming und das Knotenwertstreaming für Nachrichten in WCF. Aus diesem Grund ist das Streaming für LOB-Typen eng daran gebunden, wie Nachrichten sowohl vom Adapter als auch von einer Clientanwendung erstellt und genutzt werden. Ein Ergebnis ist, dass die Unterstützung für Streaming-LOB-Typen nicht für alle Programmiermodelle gleich ist.

    Die Abschnitte in diesem Thema enthalten Folgendes:

  • Grundlegende Hintergrundinformationen dazu, wie das Nachrichtenstreaming in WCF unterstützt wird und wie es vom Adapter implementiert wird.

  • Informationen dazu, wie Streaming für LOB-Datentypen unterstützt wird, wenn Sie den Adapter in jedem Programmiermodell verwenden.

Streaminggrundlagen

Die Unterstützung für das Streaming, das vom Oracle Database-Adapter implementiert wird, besteht aus folgenden Kombinationen:

  • Unterstützung des Nachrichtenstreamings in WCF.

  • Streamingunterstützung in der Oracle-Clientbibliothek (ODP.NET).

  • Die Art und Weise, wie Nachrichten intern vom Adapter erstellt und genutzt werden.

Unterstützung für Nachrichtenstreaming in WCF

Wie WCF das Streaming für eine Nachricht unterstützt, hängt sowohl davon ab, wie die Nachricht erstellt wird als auch davon, wie die Nachricht genutzt wird.

  • Eine WCF-Nachricht wird mithilfe der statischen Create-Methode von System.ServiceModel.Channels.Message erstellt. Diese Methode verfügt über mehrere Überladungen, die verschiedene Möglichkeiten unterstützen, den Nachrichtentext zu übergeben. Eine WCF-Nachricht kann erstellt werden, indem Sie den Nachrichtentext mit übergeben:

    • Ein System.Xml. XmlReader oder

    • Ein System.ServiceModel.Channels.BodyWriter.

  • Eine WCF-Nachricht kann mit verwendet werden

    • Ein XmlReader durch Aufrufen von Message.GetReaderAtBodyContents() oder

    • Ein XmlDictionaryWriter durch Aufrufen von Message.WriteBodyContents(XmlDictionaryWriter).

    In der folgenden Tabelle wird das Verhalten von WCF für verschiedene Kombinationen des Erstellens und Verwendens von Nachrichten veranschaulicht.

Nachricht erstellt mit Mit verarbeitete Nachricht WCF-Verhalten
XmlBodyWriter XmlDictionaryWriter Das Knotenwertstreaming wird unterstützt. WCF leitet die beiden Writer zusammen, um das Streaming zu ermöglichen. Sowohl der XmlBodyWriter als auch der XmlDictionaryWriter müssen knotenwertbasiertes Streaming unterstützen, damit dies erfolgt.
XmlBodyWriter XmlReader Knotenstreaming wird unterstützt. WCF puffert den XmlReader intern.
XmlReader XmlDictionaryWriter Knotenstreaming wird unterstützt. WCF puffert den XmlReader intern und ruft den XmlDictionaryWriter zurück.
XmlReader XmlReader Knotenstreaming wird unterstützt. WCF puffert den XmlReader intern.

Streamingunterstützung in der Oracle-Clientbibliothek (ODP.NET)

ODP.NET unterstützt Streaming auf folgende Weise:

  • Streaming wird nur für Oracle LOB-Datentypen unterstützt.

  • Bei einigen Tabellenvorgängen (und Ansichtsvorgängen) werden LOB-Datentypen gepuffert. Daher wird kein Streaming unterstützt.

Interne Nachrichtenverarbeitung durch den Adapter

Der Adapter unterstützt das Streaming auf folgende Weise:

  • Der Adapter erweitert Message , um die benutzerdefinierte Nachrichtenklasse Microsoft.Adapters.AdapterUtilities.AdapterMessage zu implementieren. Sie erstellt eine AdapterMessage für alle WCF-Nachrichten, die sie für den Adapterclient bereitstellt. dies umfasst die Antwortnachrichten für alle ausgehenden Vorgänge und die Anforderungsnachricht für den POLLINGSTMT-Vorgang. Dadurch kann der Adapter das Node-Wert-Streaming für den ReadLOB-Vorgang unterstützen, indem er einen XmlReader bereitstellt, der ReadValueChunk für Adapterclients unterstützt.

  • Der Adapter nutzt alle vom Client empfangenen Nachrichten mithilfe einer benutzerdefinierten Implementierung von XmlDictionaryWriter.

  • Der Adapter erstellt alle Nachrichten, die er an den Client sendet, mithilfe einer benutzerdefinierten Implementierung von XmlBodyWriter, mit Ausnahme der ReadLOB-Antwortnachricht. (Dies umfasst Antwortnachrichten für alle ausgehenden Vorgänge und die Anforderungsnachricht für den POLLINGSTMT-Vorgang.)

Streamingunterstützung im WCF-Kanalmodell

Die folgende Tabelle enthält ausführliche Informationen zur Unterstützung des Streamings im WCF-Kanalmodell.

Vorgang Knotenstreaming Node-Value Streaming BESCHREIBUNG
Tabelleneinfügevorgang Unterstützt* Zwischen dem Adapter und der Oracle-Datenbank wird nicht unterstützt. Wird zwischen Client und Adapter unterstützt.* End-to-End-Knoten-Wert-Streaming wird nicht unterstützt, da die Werte der LOB-Spalten von ODP.NET gepuffert werden und dann der Einfügevorgang ausgeführt wird. Das Knotenwertstreaming zwischen dem Client und dem Adapter ist jedoch für LOB-Spalten möglich, wenn der Client die Nachricht mit einem BodyWriter erstellt.
Table Select-Vorgang Unterstützt Unterstützt Der Adapter verwendet einen BodyWriter , um die Antwortnachricht zu erstellen. Wenn der Client die Nachricht mit einem XmlDictionaryWriter nutzt, erfolgt das Knotenwertstreaming für BRANCHENspalten.
Tabellenaktualisierungsvorgang Unterstützt Zwischen dem Adapter und der Oracle-Datenbank wird nicht unterstützt. Wird zwischen Client und Adapter unterstützt. End-to-End-Knoten-Wert-Streaming wird nicht unterstützt, da die Werte der LOB-Spalten von ODP.NET gepuffert werden und dann die Aktualisierung ausgeführt wird. Das Streaming von Knotenwerten zwischen dem Client und dem Adapter ist jedoch für LOB-Spalten möglich, wenn der Client die Nachricht mit einem BodyWriter erstellt.
Tabellenlöschvorgang Unterstützt Zwischen dem Adapter und der Oracle-Datenbank wird nicht unterstützt. Wird zwischen Client und Adapter unterstützt. Das Streaming von End-to-End-Knotenwerten wird nicht unterstützt, da die Werte der LOB-Spalten von ODP.NET gepuffert werden und dann der Löschvorgang ausgeführt wird. Das Streaming von Knotenwerten zwischen dem Client und dem Adapter ist jedoch für LOB-Spalten möglich, wenn der Client die Nachricht mit einem BodyWriter erstellt.
Table ReadLOB-Vorgang Unterstützt Unterstützt Der ReadLOB-Vorgang ist in erster Linie für das Streamen von LOB-Datenspalten im WCF-Dienstmodell konzipiert. Wenn der Client im WCF-Kanalmodell die Nachricht mithilfe eines XmlReader verwendet (durch Aufrufen der GetReaderAtBodyContents-Methode für die Antwortnachricht), erfolgt end-to-End-Knoten-Wert-Streaming. Dies liegt daran, dass der Adapter einen XmlReader zurückgibt, der ReadValueChunk-Aufrufe für die ReadLOB-Antwortnachricht unterstützt. Es wird jedoch empfohlen, den ReadLOB-Vorgang aus dem WCF-Kanalmodell nicht zu verwenden. Sie können stattdessen einen Select-Vorgang oder einen SQLEXECUTE-Vorgang verwenden.
Table UpdateLOB-Vorgang Unterstützt Unterstützt Der Adapter verwendet einen XmlDictionaryWriter , um die Anforderungsnachricht zu nutzen. Wenn der Client einen BodyWriter zum Erstellen der Anforderungsnachricht verwendet, erfolgt ein End-to-End-Knotenwertstreaming für LOB-Daten.
SQLEXECUTE-Vorgang Unterstützt Unterstützt Der Adapter verwendet einen BodyWriter , um die Antwortnachricht zu erstellen.

Wenn der Client einen XmlDictionaryWriter verwendet, um die Antwortnachricht zu nutzen, erfolgt ein End-to-End-Knoten-Wert-Streaming für die LOB-Daten.

End-to-End-Knoten-Wert-Streaming wird für die Anforderungsmeldung nicht unterstützt, da der Adapter alle Operanden puffern muss, bevor er den Vorgang für die Oracle-Datenbank aufrufen kann.
Gespeicherte Prozedur und Funktionsvorgang Unterstützt Unterstützt Der Adapter verwendet einen BodyWriter , um die Antwortnachricht zu erstellen.

Wenn der Client einen XmlDictionaryWriter verwendet, um die Antwortnachricht zu nutzen, erfolgt ein End-to-End-Knoten-Wert-Streaming für die LOB-Daten. (Dies bedeutet, dass streaming für OUT- und IN OUT-Prozeduren und Funktionsparameter in der Antwortnachricht unterstützt wird.)

End-to-End-Knoten-Wert-Streaming wird für die Anforderungsmeldung nicht unterstützt, da der Adapter alle Operanden puffern muss, bevor er den Vorgang für die Oracle-Datenbank aufrufen kann.
POLLINGSTMT-Vorgang Unterstützt Unterstützt Der Adapter verwendet einen BodyWriter , um die POLLINGSTMT-Anforderungsnachricht zu erstellen. Wenn der Client die Nachricht mit einem XmlDictionaryWriter verwendet, erfolgt das Knotenwertstreaming für LOB-Spalten.

Informationen zum Implementieren des LOB-Datenstreamings in Ihrem Code bei Verwendung des WCF-Kanalmodells finden Sie unter Streamen von Oracle Database LOB-Datentypen mithilfe des WCF-Kanalmodells.

Streamingunterstützung im WCF-Dienstmodell

Zum Serialisieren und Deserialisieren zwischen der XML-Darstellung einer Nachricht und der Darstellung des verwalteten Codeobjekts dieser Nachricht muss die gesamte Nachricht geschrieben und in den Arbeitsspeicher gelesen werden. Aus diesem Grund wird für die meisten Vorgänge weder das Knotenstreaming noch das Knotenwertstreaming unterstützt.

Die einzige Ausnahme ist der ReadLOB-Vorgang. Dieser Vorgang wird speziell implementiert, um End-to-End-Streaming zum Lesen von Tabellen und anzeigen von LOB-Spalten im WCF-Dienstmodell zu unterstützen.

Streamingunterstützung in BizTalk Server

Die folgende Tabelle enthält ausführliche Informationen dazu, wie Streaming in BizTalk Server unterstützt wird. (Alle Verweise auf den "Adapter" beziehen sich auf den Oracle Database-Adapter. Auf den WCF-Custom Adapter wird in dieser Tabelle immer mit seinem vollständigen Namen verwiesen.)

Vorgang Knotenstreaming Node-Value Streaming BESCHREIBUNG
Tabelleneinfügungsvorgang Unterstützt* Wird zwischen dem Adapter und der Oracle-Datenbank nicht unterstützt. Daten werden jedoch zwischen BizTalk Server und dem Adapter gestreamt. End-to-End-Knoten-Wert-Streaming wird nicht unterstützt, da die Werte von LOB-Spalten von ODP.NET gepuffert werden und dann die Einfügung ausgeführt wird. Das Knotenwertstreaming zwischen BizTalk Server und dem Adapter wird jedoch für LOB-Datentypen unterstützt, da der WCF-Custom-Adapter die Nachricht mit einem BodyWriter erstellt.
Table Select-Vorgang Unterstützt Unterstützt Der WCF-Custom-Adapter verwendet einen XmlDictionaryWriter , um die Antwortnachricht zu nutzen, sodass end-to-End-Knoten-Wert-Streaming für LOB-Typen unterstützt wird.
Tabellenaktualisierungsvorgang Unterstützt Wird zwischen dem Adapter und der Oracle-Datenbank nicht unterstützt. Daten werden jedoch zwischen BizTalk Server und dem Adapter gestreamt. End-to-End-Knoten-Wert-Streaming wird nicht unterstützt, da die Werte der LOB-Spalten von ODP.NET gepuffert werden und dann die Aktualisierung ausgeführt wird. Das Knotenwertstreaming zwischen BizTalk Server und dem Adapter wird jedoch für LOB-Datentypen unterstützt, da der WCF-Custom-Adapter die Nachricht mit einem BodyWriter erstellt.
Tabellenlöschvorgang Unterstützt Wird zwischen dem Adapter und der Oracle-Datenbank nicht unterstützt. Daten werden jedoch zwischen BizTalk Server und dem Adapter gestreamt. End-to-End-Knoten-Wert-Streaming wird nicht unterstützt, da die Werte von LOB-Spalten von ODP.NET gepuffert werden und dann der Löschvorgang ausgeführt wird. Das Knotenwertstreaming zwischen BizTalk Server und dem Adapter wird jedoch für LOB-Datentypen unterstützt, da der WCF-Custom-Adapter die Nachricht mit einem BodyWriter erstellt.
Table ReadLOB-Vorgang Der ReadLOB-Vorgang wird für BizTalk Server nicht unterstützt. Der ReadLOB-Vorgang wird für BizTalk Server nicht unterstützt. Der ReadLOB-Vorgang wird für BizTalk Server nicht unterstützt. Verwenden Sie stattdessen den Select-Vorgang oder einen SQLEXECUTE-Vorgang.
Table UpdateLOB-Vorgang Unterstützt Unterstützt Der WCF-Custom-Adapter verwendet einen BodyWriter zum Erstellen der Anforderungsmeldung, sodass end-to-End-Knoten-Wert-Streaming für LOB-Datentypen unterstützt wird.
SQLEXECUTE-Vorgang Unterstützt Unterstützt Der WCF-Custom-Adapter verwendet einen XmlDictionaryWriter , um die Antwortnachricht zu nutzen, sodass end-to-End-Knoten-Wert-Streaming für LOB-Datentypen in der Antwortnachricht unterstützt wird.

End-to-End-Knoten-Wert-Streaming wird für die Anforderungsmeldung nicht unterstützt, da der Adapter alle Operanden puffern muss, bevor er den Vorgang für die Oracle-Datenbank aufrufen kann.
Gespeicherte Prozedur und Funktionsvorgang Unterstützt Unterstützt Der WCF-Custom-Adapter verwendet einen XmlDictionaryWriter , um die Antwortnachricht zu nutzen, sodass end-to-End-Knoten-Wert-Streaming für LOB-Datentypen in der Antwortnachricht unterstützt wird. (Dies bedeutet, dass streaming für OUT- und IN OUT-Prozeduren und Funktionsparameter in der Antwortnachricht unterstützt wird.)

End-to-End-Knoten-Wert-Streaming wird für die Anforderungsmeldung nicht unterstützt, da der Adapter alle Operanden puffern muss, bevor er den Vorgang für die Oracle-Datenbank aufrufen kann.
POLLINGSTMT-Vorgang Unterstützt Unterstützt Der WCF-Custom Adapter verwendet einen XmlDictionaryWriter , um die (eingehende) Anforderungsnachricht zu nutzen, sodass end-to-End-Knotenwert-Streaming für LOB-Datentypen unterstützt wird.

Weitere Informationen

Entwickeln der Oracle Database-Anwendungen