Panoramica del modello di canale WCF con l'adapter Oracle Database
Per richiamare le operazioni sull'adapter Microsoft BizTalk per Oracle Database, il codice funge da client WCF e invia operazioni in uscita all'adapter. Nel modello di canale WCF il codice richiama le operazioni sull'adapter inviando un messaggio di richiesta su un canale.
Per richiamare operazioni in ingresso, ad esempio la ricezione di messaggi di modifica dei dati basati sul polling tramite l'operazione POLLINGSTMT fornita dall'adapter, il codice funge da servizio WCF e riceve l'operazione in ingresso dall'adapter. In altre parole, il codice riceve un messaggio di richiesta dall'adapter su un canale.
Negli argomenti di questa sezione viene fornita una panoramica dell'uso dell'adapter Oracle Database con il modello di canale WCF.
Panoramica del modello di canale WCF
I client e i servizi comunicano scambiando messaggi SOAP. Il modello di canale WCF è un'astrazione di basso livello di questo scambio di messaggi. Fornisce interfacce e tipi che consentono di inviare e ricevere messaggi usando uno stack di protocolli a più livelli denominato stack di canali. Ogni livello dello stack è costituito da un canale e ogni canale viene creato da un'associazione WCF. Al livello più basso si trova il canale di trasporto. Il canale di trasporto implementa il meccanismo di trasporto sottostante tra un servizio e un client e presenta ogni messaggio ai livelli superiori (e infine l'applicazione che utilizza) come System.ServiceModel.Message. La classe Message WCF è un'astrazione di un messaggio SOAP. WCF offre diverse interfacce di canale, denominate forme canale, che modellano i modelli di scambio di messaggi SOAP di base, ad esempio request-reply o unidirezionale. Un'associazione di trasporto WCF fornisce un'implementazione di una o più forme di canale che i livelli superiori possono usare per inviare e ricevere messaggi. Per altre informazioni sul modello di canale WCF, vedere Cenni preliminari sul modello di canale.
L'adapter Oracle Database è un'associazione di trasporto personalizzata WCF che espone un database Oracle come servizio WCF.
Forme di canale supportate per l'adapter di database Oracle
L'adattatore implementa le forme del canale WCF seguenti:
IRequestChannel (System.ServiceModel.Channels.IRequestChannel). L'interfaccia IRequestChannel implementa il lato client di uno scambio di messaggi request-reply. È possibile usare un IRequestChannel per eseguire operazioni per le quali si desidera utilizzare una risposta, ad esempio per eseguire una query SELECT in una tabella Oracle.
IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Questa forma implementa il lato client di uno scambio di messaggi unidirezionale. È possibile usare un IOutputChannel per richiamare un'operazione per cui non è necessario utilizzare una risposta, ad esempio per chiamare una routine Oracle senza parametri OUT.
Importante
Tutte le chiamate sottostanti dall'adapter al client Oracle sono sincrone. Sono incluse le chiamate al client Oracle che sono il risultato delle operazioni richiamate su un IOutputChannel. Quando si usa un IOutputChannel, l'adapter rimuove la risposta ricevuta dal client Oracle.
IInputChannel (System.ServiceModel.Channels.IInputChannel). Questa forma implementa il lato servizio di uno scambio di messaggi unidirezionale. Si usa un IInputChannel per ricevere messaggi per le operazioni in ingresso dall'adapter.
Analogamente a qualsiasi associazione WCF, l'adapter Oracle Database usa un modello factory per fornire canali al codice dell'applicazione. Si usa un oggetto Microsoft.Adapters.OracleDBBinding per creare istanze di:
System.ServiceModel.ChannelFactory<IRequestChannel> per fornire canali IRequestChannel che è possibile usare per richiamare le operazioni di richiesta-risposta sull'adapter.
System.ServiceModel.ChannelFactory<IOutputChannel> per fornire canali IOutputChannel che è possibile usare per richiamare operazioni unidirezionale sulla scheda.
System.ServiceModel.IChannelListener<IInputChannel> per fornire canali IInputChannel che è possibile usare per ricevere messaggi in ingresso (ad esempio, l'operazione POLLINGSTMT) dall'adapter.
Creazione di messaggi per l'adapter di database Oracle nel modello di canale WCF
In WCF la classe System.ServiceModel.Channels.Message fornisce una rappresentazione in memoria di un messaggio SOAP. Per creare un'istanza di Message , richiamare il metodo static Message.Create .
Esistono due parti importanti per il messaggio SOAP che è necessario specificare quando si crea un'istanza del messaggio da inviare all'adapter Oracle Database.
L'azione del messaggio è una stringa che fa parte dell'intestazione del messaggio SOAP. L'azione del messaggio identifica l'operazione che deve essere richiamata nel database Oracle. Di seguito viene illustrata l'azione del messaggio specificata per richiamare l'operazione Select nella tabella /SCOTT/EMP:
http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select
.Il corpo del messaggio contiene i dati dei parametri per l'operazione. Il corpo del messaggio è costituito da XML ben formato che corrisponde allo schema del messaggio previsto dall'adapter Oracle Database per l'operazione richiesta. Il corpo del messaggio seguente specifica un'operazione Select in SCOTT. Tabella EMP (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>
Per informazioni sugli schemi dei messaggi dell'adapter di Database Oracle e sulle azioni dei messaggi per le operazioni, vedere Messaggi e schemi di messaggio per l'adapter BizTalk per Oracle Database.
Questo metodo Create è sottoposto a overload e offre molte opzioni diverse per fornire il corpo del messaggio. Nel codice seguente viene illustrato come creare un'istanza di Message utilizzando un XmlReader per fornire il corpo del messaggio. In questo codice il corpo del messaggio viene letto da un file.
XmlReader readerIn = XmlReader.Create("SelectAllActivity.xml");
Message messageIn = Message.CreateMessage(MessageVersion.Default,
"http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select",
readerIn);
Importante
È necessario fornire un'azione di messaggio nell'istanza del messaggio . Questa operazione viene in genere eseguita quando viene creata l'istanza del messaggio .
Supporto dello streaming per i tipi di dati LINEB nel modello di canale WCF
Lo streaming end-to-end dei tipi di dati LOB è supportato per alcune operazioni rilevate dalla scheda. Per queste operazioni, come creare e utilizzare i messaggi inviati e ricevuti tramite il canale determina se lo streaming è supportato nei dati LOB.
Per altre informazioni su come l'adattatore Oracle Database supporta lo streaming sui dati LOB, vedere Streaming di tipi di dati di oggetti di grandi dimensioni nell'adapter Oracle Database.
Per altre informazioni sull'implementazione del flusso node-value nel codice per supportare lo streaming end-to-end dei dati LOB, vedere Streaming dei tipi di dati LOB del database Oracle tramite il modello di canale WCF.
Vedere anche
Sviluppare applicazioni Oracle Database usando il modello di canale WCF