Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'adapter Microsoft BizTalk per Oracle Database supporta lo streaming per i tipi di dati LOB (Large Object). Con l'adattatore Oracle Database, le operazioni vengono eseguite 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 dei nodi ogni nodo viene memorizzato nel buffer dall'adattatore 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 dei valori dei nodi. Nel flusso node-value il valore effettivo del nodo può essere trasmesso in blocchi tra il database Oracle e il client. Lo streaming node-value supporta lo streaming end-to-end dei tipi di dati LOB tra il client dell'adattatore e il database Oracle.
Entrambe queste modalità di streaming si basano sul supporto per lo streaming dei nodi e lo streaming dei valori dei nodi nei messaggi in WCF. Per questo motivo, lo streaming per i tipi LOB è strettamente legato al modo in cui i messaggi vengono creati e utilizzati sia dall'adapter che da un'applicazione client. Un risultato è 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 fondamentali sul modo in cui il flusso di messaggi è supportato in WCF e sul modo in cui viene implementato dall'adapter.
Informazioni sul modo in cui lo streaming per i tipi di dati LOB è supportato quando si usa l'adattatore in ogni modello di programmazione.
Fondamenti dello streaming
Il supporto per lo streaming implementato dall'adapter Oracle Database è una combinazione di:
Supporto per lo streaming di messaggi in WCF.
Supporto per lo 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 in un messaggio dipende sia dalla modalità di creazione del messaggio che dalla modalità di utilizzo del messaggio.
Un messaggio WCF viene creato 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 oggetto System.Xml.XmlReader, o
System.ServiceModel.Channels.BodyWriter.
È possibile consumare un messaggio WCF usando
XmlReader, chiamando Message.GetReaderAtBodyContents(), o
Un XmlDictionaryWriter invocando Message.WriteBodyContents(XmlDictionaryWriter).
Nella tabella seguente viene illustrato il comportamento di WCF per diverse combinazioni di creazione e utilizzo di messaggi.
| Messaggio creato con | Messaggio utilizzato con | Comportamento WCF |
|---|---|---|
| XmlBodyWriter | XmlDictionaryWriter | Il streaming di valori nodo è supportato. WCF collega tramite pipe i due scrittori per abilitare lo streaming. Sia XmlBodyWriter che XmlDictionaryWriter devono supportare lo streaming dei valori dei nodi affinché venga eseguito. |
| XmlBodyWriter | XmlReader | Lo streaming dei nodi è supportato. WCF memorizza internamente nel buffer xmlReader. |
| XmlReader | XmlDictionaryWriter | Lo streaming dei nodi è supportato. WCF memorizza internamente nel buffer XmlReader e richiama xmlDictionaryWriter. |
| XmlReader | XmlReader | Lo streaming dei nodi è supportato. WCF memorizza internamente nel buffer xmlReader. |
Supporto per lo streaming nella libreria client Oracle (ODP.NET)
ODP.NET supporta lo streaming nel modo seguente:
Lo streaming è supportato solo nei tipi di dati LOB Oracle.
Per alcune operazioni di tabella (e vista), i tipi di dati LOB vengono memorizzati nel buffer. Di conseguenza, non è supportato alcuno streaming.
Gestione interna dei messaggi da parte dell'adapter
L'adattatore supporta lo streaming nel modo seguente:
L'adapter estende Message per implementare una classe messaggio personalizzata, Microsoft.Adapters.AdapterUtilities.AdapterMessage. Crea un adapterMessage per tutti i messaggi WCF forniti al client dell'adapter; sono inclusi i messaggi di risposta per tutte le operazioni in uscita e il messaggio di richiesta per l'operazione POLLINGSTMT. Ciò consente all'adattatore di supportare lo streaming di valori di nodo per l'operazione ReadLOB fornendo un XmlReader che supporta ReadValueChunk per adapter client.
L'adapter utilizza 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. Sono inclusi i messaggi di risposta per tutte le operazioni in uscita e il messaggio di richiesta per l'operazione POLLINGSTMT.
Supporto per lo streaming nel modello di canale WCF
Nella tabella seguente vengono fornite informazioni dettagliate sul modo in cui lo streaming è supportato nel modello di canale WCF.
| Operazione | Node Streaming | Node-Value Streaming | Descrizione |
|---|---|---|---|
| Operazione di inserimento della tabella | Supportato* | Non supportato tra l'adapter e il database Oracle. Supportato tra il client e l'adapter.* | Lo streaming dei valori dei nodi end-to-end non è supportato perché i valori delle colonne LOB vengono bufferizzati da ODP.NET, e quindi viene eseguito l'inserimento. Tuttavia, lo streaming dei valori di nodo tra il client e l'adattatore è possibile per le colonne LOB, se il client crea il messaggio con BodyWriter. |
| Operazione di selezione di tabella | Sostenuto | Sostenuto | L'adattatore usa bodywriter per creare il messaggio di risposta. Se il client utilizza il messaggio usando un xmlDictionaryWriter, si verifica lo streaming dei valori di nodo per le colonne LOB. |
| Operazione di aggiornamento tabelle | Sostenuto | Non supportato tra l'adapter e il database Oracle. Supportato tra il client e l'adapter. | Il flusso di 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 dei valori di nodo tra il client e l'adattatore è possibile per le colonne LOB se il client crea il messaggio con BodyWriter. |
| Operazione di eliminazione della tabella | Sostenuto | Non supportato tra l'adapter e il database Oracle. Supportato tra il client e l'adapter. | Il flusso dei valori dei nodi 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 dei valori di nodo tra il client e l'adattatore è possibile per le colonne LOB se il client crea il messaggio con BodyWriter. |
| Operazione di lettura LOB della tabella | Sostenuto | Sostenuto | L'operazione ReadLOB è progettata principalmente per trasmettere colonne di dati LOB 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 dei valori dei nodi 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 della tabella | Sostenuto | Sostenuto | L'adapter usa un XmlDictionaryWriter per consumare il messaggio di richiesta. Se il client utilizza BodyWriter per creare il messaggio di richiesta, avviene lo streaming end-to-end del valore del nodo per i dati LOB. |
| Operazione SQLEXECUTE | Sostenuto | Sostenuto | L'adattatore 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. Il flusso end-to-end node-value 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 | Sostenuto | Sostenuto | L'adattatore 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 la procedura OUT e IN OUT e i parametri di funzione nel messaggio di risposta. Il flusso end-to-end node-value 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 | Sostenuto | Sostenuto | L'adapter usa bodywriter per creare il messaggio di richiesta POLLINGSTMT. Se il client utilizza il messaggio tramite un XmlDictionaryWriter, si verifica 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 tabelle e la visualizzazione delle colonne LOB 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 | Node-Value Streaming | Descrizione |
|---|---|---|---|
| Operazione di inserimento della tabella | Supportato* | Non supportato tra l'adattatore e il database Oracle; Tuttavia, i dati vengono trasmessi tra BizTalk Server e l'adapter. | Il flusso di 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 dei valori di nodo tra BizTalk Server e l'adapter è supportato per i tipi di dati LOB perché l'adattatore WCF-Custom crea il messaggio con BodyWriter. |
| Operazione di selezione di tabella | Sostenuto | Sostenuto | L'adattatore WCF-Custom usa xmlDictionaryWriter per utilizzare il messaggio di risposta, pertanto è supportato lo streaming end-to-end dei valori di nodo per i tipi LOB. |
| Operazione di aggiornamento tabelle | Sostenuto | Non supportato tra l'adattatore e il database Oracle; Tuttavia, i dati vengono trasmessi tra BizTalk Server e l'adapter. | Il streaming end-to-end dei valori dei nodi non è supportato perché i valori delle colonne LOB vengono memorizzati nel buffer da ODP.NET e quindi viene eseguito l'aggiornamento. Tuttavia, lo streaming dei valori di nodo tra BizTalk Server e l'adapter è supportato per i tipi di dati LOB perché l'adattatore WCF-Custom crea il messaggio con BodyWriter. |
| Operazione di eliminazione della tabella | Sostenuto | Non supportato tra l'adattatore e il database Oracle; Tuttavia, i dati vengono trasmessi tra BizTalk Server e l'adapter. | Il flusso dei valori dei nodi 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 dei valori di nodo tra BizTalk Server e l'adapter è supportato per i tipi di dati LOB perché l'adattatore WCF-Custom crea il messaggio con BodyWriter. |
| Operazione di lettura LOB della 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 della tabella | Sostenuto | Sostenuto | L'adattatore WCF-Custom usa BodyWriter per creare il messaggio di richiesta, quindi è supportato lo streaming end-to-end node-value per i tipi di dati LOB. |
| Operazione SQLEXECUTE | Sostenuto | Sostenuto | L'adattatore WCF-Custom usa xmlDictionaryWriter per utilizzare il messaggio di risposta, quindi è supportato lo streaming di valori di nodo end-to-end per i tipi di dati LOB nel messaggio di risposta. Il flusso end-to-end node-value 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 | Sostenuto | Sostenuto | L'adattatore WCF-Custom usa xmlDictionaryWriter per utilizzare il messaggio di risposta, quindi è supportato lo streaming di valori di nodo end-to-end per i tipi di dati LOB nel messaggio di risposta. Ciò significa che lo streaming è supportato per la procedura OUT e IN OUT e i parametri di funzione nel messaggio di risposta. Il flusso end-to-end node-value 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 | Sostenuto | Sostenuto | L'adattatore WCF-Custom usa un XmlDictionaryWriter per consumare il messaggio di richiesta (in ingresso), pertanto è supportato lo streaming end-to-end node-value per i tipi di dati LOB. |