Condividi tramite


Streaming di tipi di dati di oggetti di grandi dimensioni nell'adattatore Oracle Database

L'adapter Microsoft BizTalk per Oracle Database supporta lo streaming per i tipi di dati LOB (Oracle Large Object). Con le operazioni dell'adapter di database Oracle vengono richiamate e le risposte vengono restituite scambiando messaggi SOAP. Un corpo del messaggio SOAP è costituito da nodi XML.

Esistono due tipi di streaming di messaggi supportati dall'adattatore:

  • Streaming dei nodi. Nel flusso di nodi ogni nodo viene memorizzato nel buffer dell'adapter prima che venga inviato al database Oracle (o restituito al client). Ciò significa che, per un tipo di dati LOB, l'intero valore viene letto in un buffer.

  • Streaming del valore del nodo. Nel flusso node-value il valore effettivo del nodo può essere trasmesso in blocchi tra il database Oracle e il client. Il flusso node-value supporta lo streaming end-to-end dei tipi di dati LOB tra il client dell'adapter e il database Oracle.

    Entrambe queste modalità di streaming si basano sul supporto per lo streaming dei nodi e lo streaming del valore del nodo nei messaggi in WCF. Per questo motivo, lo streaming per i tipi LOB è legato strettamente alla modalità di creazione e utilizzo dei messaggi sia dalla scheda che da un'applicazione client. Un risultato di questo è che il supporto per i tipi LOB di streaming non è lo stesso in tutti i modelli di programmazione.

    Le sezioni di questo argomento forniscono:

  • Informazioni di base sul modo in cui lo streaming dei messaggi è supportato in WCF e su come viene implementato dall'adattatore.

  • Informazioni sul modo in cui lo streaming per i tipi di dati LOB è supportato quando si usa l'adattatore in ogni modello di programmazione.

Nozioni fondamentali per lo streaming

Il supporto per lo streaming implementato dall'adattatore Oracle Database è una combinazione di:

  • Supporto per lo streaming dei messaggi in WCF.

  • Supporto di streaming nella libreria client Oracle (ODP.NET).

  • Il modo in cui i messaggi vengono creati e utilizzati internamente dall'adapter.

Supporto per lo streaming di messaggi in WCF

Il modo in cui WCF supporta lo streaming su un messaggio dipende dal modo in cui viene creato il messaggio e dal modo in cui viene usato il messaggio.

  • Viene creato un messaggio WCF usando il metodo Create statico di System.ServiceModel.Channels.Message. Questo metodo include diversi overload che supportano diversi modi per passare il corpo del messaggio. È possibile creare un messaggio WCF passando il corpo del messaggio usando:

    • Un System.Xml. XmlReader o

    • System.ServiceModel.Channels.BodyWriter.

  • È possibile usare un messaggio WCF tramite

    • XmlReader chiamando Message.GetReaderAtBodyContents()o

    • XmlDictionaryWriter chiamando Message.WriteBodyContents(XmlDictionaryWriter).

    Nella tabella seguente viene illustrato il comportamento di WCF per combinazioni diverse di creazione e utilizzo di messaggi.

Messaggio creato con Messaggio utilizzato con Comportamento WCF
XmlBodyWriter XmlDictionaryWriter Il flusso node-value è supportato. WCF pipe i due writer insieme per abilitare lo streaming. Sia XmlBodyWriter che XmlDictionaryWriter devono supportare lo streaming node-value per verificarsi.
XmlBodyWriter XmlReader Il flusso di nodi è supportato. WCF esegue internamente il buffer di XmlReader.
XmlReader XmlDictionaryWriter Il flusso di nodi è supportato. WCF esegue internamente il buffer di XmlReader e chiama nuovamente in XmlDictionaryWriter.
XmlReader XmlReader Il flusso di nodi è supportato. WCF esegue internamente il buffer di XmlReader.

Supporto streaming nella libreria client Oracle (ODP.NET)

ODP.NET supporta lo streaming nel modo seguente:

  • Streaming è supportato solo nei tipi di dati Oracle LOB.

  • Per alcune operazioni di tabella (e visualizzazione), i tipi di dati LOB vengono memorizzati nel buffer. Pertanto, nessun flusso è supportato.

Gestione dei messaggi interni tramite l'adapter

L'adapter supporta lo streaming nel modo seguente:

  • L'adapter estende Message per implementare una classe di messaggio personalizzata, Microsoft.Adapters.AdapterUtilities.AdapterMessage. Crea un AdapterMessage per tutti i messaggi WCF che fornisce al client dell'adattatore; include i messaggi di risposta per tutte le operazioni in uscita e il messaggio di richiesta per l'operazione POLLINGSTMT. Ciò consente all'adapter di supportare lo streaming node-value per l'operazione ReadLOB fornendo un xmlReader che supporta ReadValueChunk ai client dell'adattatore.

  • L'adapter usa tutti i messaggi ricevuti dal client usando un'implementazione personalizzata di XmlDictionaryWriter.

  • L'adapter crea tutti i messaggi inviati al client usando un'implementazione personalizzata di XmlBodyWriter, ad eccezione del messaggio di risposta ReadLOB. Include i messaggi di risposta per tutte le operazioni in uscita e il messaggio di richiesta per l'operazione POLLINGSTMT.

Supporto streaming nel modello di canale WCF

La tabella seguente fornisce informazioni dettagliate sul modo in cui lo streaming è supportato nel modello di canale WCF.

Operazione Streaming dei nodi streaming Node-Value Descrizione
Operazione di inserimento tabelle Supportato* Non supportato tra l'adapter e il database Oracle. Supportato tra il client e l'adapter.* Il flusso end-to-end node-value non è supportato perché i valori delle colonne LOB vengono memorizzati nel buffer da ODP.NET e quindi viene eseguito l'inserimento. Tuttavia, lo streaming del valore del nodo tra il client e la scheda è possibile per le colonne LOB, se il client crea il messaggio con un BodyWriter.
Operazione Selezione tabella Supportato Supportato L'adapter usa un BodyWriter per creare il messaggio di risposta. Se il client usa il messaggio usando un oggetto XmlDictionaryWriter, si verifica lo streaming del valore del nodo per le colonne LOB.
Operazione di aggiornamento tabella Supportato Non supportato tra l'adapter e il database Oracle. Supportato tra il client e l'adapter. Il flusso end-to-end node-value non è supportato perché i valori delle colonne LOB vengono memorizzati nel buffer da ODP.NET e quindi viene eseguito l'aggiornamento. Tuttavia, lo streaming del valore del nodo tra il client e l'adapter è possibile per le colonne LOB se il client crea il messaggio con bodywriter.
Operazione di eliminazione tabella Supportato Non supportato tra l'adapter e il database Oracle. Supportato tra il client e l'adapter. Il flusso end-to-end node-value non è supportato perché i valori delle colonne LOB vengono memorizzati nel buffer da ODP.NET e quindi viene eseguita l'eliminazione. Tuttavia, lo streaming del valore del nodo tra il client e l'adapter è possibile per le colonne LOB se il client crea il messaggio con bodywriter.
Operazione ReadLOB tabella Supportato Supportato L'operazione ReadLOB è progettata principalmente per lo streaming di colonne di dati LINEB nel modello di servizio WCF. Nel modello di canale WCF, se il client utilizza il messaggio usando un XmlReader (richiamando il metodo GetReaderAtBodyContents nel messaggio di risposta), si verifica lo streaming di valori di nodo end-to-end. Ciò è dovuto al fatto che l'adapter restituisce un XmlReader che supporta le chiamate ReadValueChunk per il messaggio di risposta ReadLOB. È tuttavia consigliabile non usare l'operazione ReadLOB dal modello di canale WCF. È invece possibile usare un'operazione Select o un'operazione SQLEXECUTE.
Operazione UpdateLOB tabella Supportato Supportato L'adapter utilizza un oggetto XmlDictionaryWriter per utilizzare il messaggio di richiesta. Se il client usa bodywriter per creare il messaggio di richiesta, si verifica lo streaming end-to-end node-value per i dati LOB.
Operazione SQLEXECUTE Supportato Supportato L'adapter usa bodywriter per creare il messaggio di risposta.

Se il client usa xmlDictionaryWriter per utilizzare il messaggio di risposta, si verifica lo streaming dei valori di nodo end-to-end per i dati LOB.

Lo streaming dei valori di nodo end-to-end non è supportato per il messaggio di richiesta perché l'adattatore deve memorizzare nel buffer tutti gli operandi prima di poter richiamare l'operazione nel database Oracle.
Stored procedure e operazione di funzione Supportato Supportato L'adapter usa bodywriter per creare il messaggio di risposta.

Se il client usa xmlDictionaryWriter per utilizzare il messaggio di risposta, si verifica lo streaming dei valori di nodo end-to-end per i dati LOB. Ciò significa che lo streaming è supportato per le procedure OUT e IN OUT e i parametri di funzione nel messaggio di risposta.

Lo streaming dei valori di nodo end-to-end non è supportato per il messaggio di richiesta perché l'adattatore deve memorizzare nel buffer tutti gli operandi prima di poter richiamare l'operazione nel database Oracle.
Operazione POLLINGSTMT Supportato Supportato L'adattatore usa bodywriter per creare il messaggio di richiesta POLLINGSTMT. Se il client utilizza il messaggio usando un oggetto XmlDictionaryWriter, viene eseguito lo streaming dei valori del nodo per le colonne LOB.

Per informazioni su come implementare lo streaming di dati LOB nel codice quando si usa il modello di canale WCF, vedere Streaming dei tipi di dati LOB del database Oracle tramite il modello di canale WCF.

Supporto per lo streaming nel modello di servizio WCF

Serializzazione e deserializzazione tra la rappresentazione XML di un messaggio e la rappresentazione dell'oggetto codice gestito del messaggio richiede la scrittura e la lettura dell'intero messaggio in memoria. Per questo motivo, per la maggior parte delle operazioni non è supportato lo streaming dei nodi né lo streaming dei valori di nodo.

L'unica eccezione è l'operazione ReadLOB. Questa operazione viene implementata specificamente per supportare lo streaming end-to-end per la lettura di colonne line-to-end nel modello di servizio WCF.

Supporto per lo streaming in BizTalk Server

Nella tabella seguente vengono fornite informazioni dettagliate sul supporto dello streaming in BizTalk Server. Tutti i riferimenti all'adattatore fanno riferimento all'adapter Oracle Database. L'adattatore WCF-Custom viene sempre indicato dal nome completo in questa tabella.

Operazione Node Streaming streaming Node-Value Descrizione
Operazione di inserimento tabella Supportato* Non supportato tra l'adattatore e il database Oracle; Tuttavia, i dati vengono trasmessi tra BizTalk Server e l'adattatore. Lo streaming dei valori di nodo end-to-end non è supportato perché i valori delle colonne LOB vengono memorizzati nel buffer da ODP.NET e quindi viene eseguito l'inserimento. Tuttavia, lo streaming di valori di nodo tra BizTalk Server e l'adattatore è supportato per i tipi di dati LOB perché l'adattatore WCF-Custom crea il messaggio con BodyWriter.
Operazione Di selezione tabella Supportato Supportato L'adattatore WCF-Custom usa xmlDictionaryWriter per utilizzare il messaggio di risposta, quindi è supportato lo streaming end-to-end node-value per i tipi LOB.
Operazione di aggiornamento tabella Supportato Non supportato tra l'adattatore e il database Oracle; Tuttavia, i dati vengono trasmessi tra BizTalk Server e l'adattatore. Lo streaming dei valori di nodo end-to-end non è supportato perché i valori delle colonne LOB vengono memorizzati nel buffer da ODP.NET e quindi viene eseguito l'aggiornamento. Tuttavia, lo streaming di valori di nodo tra BizTalk Server e l'adattatore è supportato per i tipi di dati LOB perché l'adattatore WCF-Custom crea il messaggio con BodyWriter.
Operazione di eliminazione tabella Supportato Non supportato tra l'adattatore e il database Oracle; Tuttavia, i dati vengono trasmessi tra BizTalk Server e l'adattatore. Lo streaming dei valori di nodo end-to-end non è supportato perché i valori delle colonne LOB vengono memorizzati nel buffer da ODP.NET e quindi viene eseguita l'eliminazione. Tuttavia, lo streaming di valori di nodo tra BizTalk Server e l'adattatore è supportato per i tipi di dati LOB perché l'adattatore WCF-Custom crea il messaggio con BodyWriter.
Operazione ReadLOB tabella L'operazione ReadLOB non è supportata per BizTalk Server. L'operazione ReadLOB non è supportata per BizTalk Server. L'operazione ReadLOB non è supportata per BizTalk Server. Usare invece l'operazione Select o un'operazione SQLEXECUTE.
Operazione UpdateLOB tabella Supportato Supportato L'adattatore WCF-Custom usa un BodyWriter per creare il messaggio di richiesta, quindi è supportato lo streaming end-to-end node-value per i tipi di dati LOB.
Operazione SQLEXECUTE Supportato Supportato L'adattatore WCF-Custom usa un oggetto XmlDictionaryWriter per utilizzare il messaggio di risposta, pertanto è supportato lo streaming end-to-end del valore del nodo per i tipi di dati LOB nel messaggio di risposta.

Lo streaming dei valori di nodo end-to-end non è supportato per il messaggio di richiesta perché l'adattatore deve memorizzare nel buffer tutti gli operandi prima di poter richiamare l'operazione nel database Oracle.
Stored procedure e operazione di funzione Supportato Supportato L'adattatore WCF-Custom usa un oggetto XmlDictionaryWriter per utilizzare il messaggio di risposta, pertanto è supportato lo streaming end-to-end del valore del nodo per i tipi di dati LOB nel messaggio di risposta. Ciò significa che lo streaming è supportato per le procedure OUT e IN OUT e i parametri di funzione nel messaggio di risposta.

Lo streaming dei valori di nodo end-to-end non è supportato per il messaggio di richiesta perché l'adattatore deve memorizzare nel buffer tutti gli operandi prima di poter richiamare l'operazione nel database Oracle.
Operazione POLLINGSTMT Supportato Supportato L'adattatore WCF-Custom usa un oggetto XmlDictionaryWriter per utilizzare il messaggio di richiesta (in ingresso), quindi è supportato lo streaming end-to-end node-value per i tipi di dati LOB.

Vedere anche

Sviluppare applicazioni per il database Oracle