Eseguire operazioni composte su SQL Server usando BizTalk Server
L'adattatore SQL consente ai client dell'adapter di eseguire operazioni composte nel database SQL Server. Un'operazione composita può includere:
Operazioni Inserisci, Aggiorna ed Elimina. Un'operazione Select non è supportata come parte di un'operazione composita.
Stored procedure eseguite come operazioni.
Una singola operazione composita può avere un numero qualsiasi di queste operazioni, in qualsiasi ordine. Ad esempio, è possibile avere due operazioni di inserimento seguite da un'operazione Delete e infine un'esecuzione di stored procedure. È anche possibile disporre di operazioni diverse destinate a tabelle o visualizzazioni di database diverse. Per altre informazioni sul modo in cui l'adapter supporta le operazioni composte, vedere Eseguire operazioni composte in SQL Server usando l'adapter SQL. Per informazioni sulla struttura del messaggio SOAP per operazioni composte, vedere Schemi di messaggio per operazioni composite.
Nota
Se si esegue l'operazione sulle tabelle con colonne di tipi definiti dall'utente, assicurarsi di fare riferimento a Operazioni su tabelle e viste con tipi di User-Defined usando l'adattatore SQL prima di iniziare a sviluppare l'applicazione.
Come eseguire operazioni composte in SQL Server
L'esecuzione di un'operazione in SQL Server tramite l'adapter SQL con BizTalk Server comporta attività procedurali descritte in Blocchi predefiniti per sviluppare applicazioni BizTalk con l'adapter SQL. Per eseguire operazioni composte nel database SQL Server, queste attività sono:
Creare un progetto BizTalk e generare lo schema per tutte le operazioni che si desidera richiamare.
Creare manualmente un file di schema che include riferimenti a tutti gli schemi generati nel passaggio precedente.
Creare messaggi nel progetto BizTalk per l'invio e la ricezione di messaggi dal database SQL Server. Questi messaggi devono essere conformi allo schema di richiesta e risposta creato nel passaggio precedente.
Creare un'orchestrazione per richiamare l'operazione composita nel database SQL Server.
Compilare e distribuire il progetto BizTalk.
Configurare l'applicazione BizTalk creando porte di invio e ricezione fisiche.
Avviare l'applicazione BizTalk.
In questo argomento vengono fornite istruzioni su come eseguire queste attività.
Esempio basato su questo argomento
Un esempio, CompositeOperations, basato su questo argomento viene fornito con bizTalk Adapter Pack. Per altre informazioni, vedere Esempi per l'adapter SQL.
Generazione dello schema
In questo argomento viene illustrato come eseguire operazioni composte, nell'ordine specificato verranno eseguite le attività seguenti:
Inserire il record nella tabella EMPLOYEE.
Recuperare tutte le colonne per l'ultimo record inserito richiamando la stored procedure GET_LAST_EMP_DATA.
Eliminare il record dalla tabella EMPLOYEE.
Eseguire gli script forniti con gli esempi per creare la tabella EMPLOYEE. Per altre informazioni sugli esempi, vedere Esempi di schemi.
Per generare lo schema per queste operazioni, è necessario creare un progetto BizTalk e usare il componente aggiuntivo Use Adapter Service. Per altre informazioni su come generare schemi, vedere Recupero di metadati per SQL Server operazioni in Visual Studio usando l'adapter SQL.
Creazione di una definizione dello schema composito
È ora necessario creare uno schema composito che fa riferimento agli schemi creati per le singole operazioni. Seguire questa procedura per creare una definizione dello schema composito.
Per aggiungere una definizione dello schema composito
Aggiungere un file di schema al progetto BizTalk. Fare clic con il pulsante destro del mouse sul nome del progetto, scegliere Aggiungi e quindi fare clic su Nuovo elemento. Nella finestra di dialogo Aggiungi nuovo elemento fare clic su File schema nella casella Categorie. Nella casella Modelli fare clic su Schema. Specificare un nome per il file dello schema e quindi fare clic su OK.
Per questo esempio, specificare il nome del file dello schema come
CompositeSchema.xsd
.Aggiungere riferimenti allo schema generato per le diverse operazioni da eseguire. In questo esempio, i diversi schemi generati per le operazioni sono:
TableOperation.dbo.Employee.xsd per le operazioni Inserisci ed Elimina.
Procedure.dbo.xsd, per la stored procedure di GET_LAST_EMP_DATA.
Per aggiungere riferimenti:
Fare clic con il pulsante destro del mouse sul nodo schema> radice< in CompositeSchema.xsd e scegliere Proprietà.
Nella casella Proprietà fare clic sul pulsante con i puntini di sospensione (...) nella proprietà Import .
Nella finestra di dialogo Importa nuovo schema nell'elenco Importa nuovo schema selezionare Importazione XSD e quindi fare clic su Aggiungi.
Nella finestra di dialogo Selezione tipi BizTalk espandere il nodo nome del progetto BizTalk, espandere Schemi e quindi selezionare lo schema da importare. In questo esempio selezionare <BizTalk_project_name>. TableOperation_dbo_Employee. Fare clic su OK.
Ripetere questo passaggio per importare <BizTalk_project_name>. anche Procedure_dbo.
Nella finestra di dialogo Importa fare clic su OK.
Aggiungere due nodi figlio al nodo dello schema radice. Un nodo figlio corrisponde allo schema della richiesta per eseguire l'operazione composita. L'altro nodo figlio corrisponde allo schema di risposta. Il nodo corrispondente allo schema della richiesta può avere qualsiasi nome. Il nodo corrispondente allo schema di risposta deve essere chiamato <request_schema_node>Response. In questo esempio verrà chiamato il nodo dello schema di richiesta come Richiesta. Quindi, il nodo dello schema di risposta è denominato RequestResponse.
Nota
Per impostazione predefinita, viene aggiunto anche un nodo Radice a un nuovo file di schema. È possibile rinominare il nodo Radice in Richiesta. Per rinominare un nodo, fare clic con il pulsante destro del mouse sul nome del nodo e scegliere Rinomina.
Per aggiungere un nodo nel <nodo Schema> :
Fare clic con il pulsante destro del mouse sul <nodo Schema, scegliere Inserisci nodo schema> e fare clic su Record figlio.
Rinominare il nuovo nodo in RequestResponse.
Aggiungere nodi figlio nel nodo Request che corrispondono allo schema di richiesta per ogni operazione eseguita come parte dell'operazione composita. Per questo esempio, è necessario aggiungere nodi figlio corrispondenti al seguente:
Inserire ed eliminare le operazioni nella tabella EMPLOYEE.
GET_LAST_EMP_DATA stored procedure.
Importante
È necessario aggiungere i nodi nello stesso ordine in cui si desidera eseguire le operazioni. Ad esempio, se si vuole inserire un record, eseguire una stored procedure e quindi eliminare un record, è necessario aggiungere prima un nodo per l'operazione Di inserimento, seguito da un nodo per la stored procedure e infine un nodo per l'operazione Elimina.
Per aggiungere nodi figlio al nodo Request :
Fare clic con il pulsante destro del mouse sul nodo Richiesta , scegliere Inserisci nodo schema e quindi fare clic su Record figlio.
Rinominare il record in modo che corrisponda a uno schema di richiesta per un'operazione eseguita come parte dell'operazione composita. Ad esempio, rinominare il nodo in "Inserisci".
Eseguire il mapping del nodo Inserisci allo schema di richiesta per l'operazione Inserisci nella tabella EMPLOYEE. A tale scopo, fare clic con il pulsante destro del mouse sul nodo Inserisci e scegliere Proprietà. Nella casella Proprietà selezionare Inserisci (Riferimento) nell'elenco Tipo struttura dati.
Ripetere questi passaggi per aggiungere nodi per gli schemi di richiesta per GET_LAST_EMP_DATA stored procedure e l'operazione Elimina. Specificare i nomi dei nodi e eseguirne il mapping allo schema corrispondente, come indicato nella tabella seguente.
Nome nodo Mappato allo schema GET_LAST_EMP_DATA GET_LAST_EMP_DATA (riferimento) Delete Elimina (riferimento)
Aggiungere nodi figlio nel nodo RequestResponse che corrispondono allo schema di risposta per ogni operazione eseguita come parte dell'operazione composita. Per questo esempio, è necessario aggiungere nodi figlio corrispondenti al seguente:
Inserire ed eliminare le operazioni nella tabella EMPLOYEE.
GET_LAST_EMP_DATA stored procedure.
Importante
È necessario aggiungere i nodi figlio nello stesso ordine dei nodi figlio nel nodo Richiesta .
Per aggiungere nodi figlio al nodo RequestResponse :
Fare clic con il pulsante destro del mouse sul nodo RequestResponse , scegliere Inserisci nodo schema e fare clic su Record figlio.
Rinominare il record in modo che corrisponda a uno schema di risposta per un'operazione eseguita come parte dell'operazione composita. Ad esempio, rinominare il nodo in "InsertResponse".
Eseguire il mapping del nodo InsertResponse allo schema di risposta per l'operazione Inserisci nella tabella EMPLOYEE. A tale scopo, fare clic con il pulsante destro del mouse sul nodo InsertResponse e scegliere Proprietà. Nella casella Proprietà selezionare InsertResponse (Riferimento) nell'elenco Tipo struttura dati.
Ripetere questi passaggi per aggiungere nodi per gli schemi di risposta per la stored procedure GET_LAST_EMP_DATA e l'operazione Elimina. Specificare i nomi dei nodi e eseguirne il mapping allo schema corrispondente, come indicato nella tabella seguente.
Nome nodo Mappato allo schema GET_LAST_EMP_DATAResponse GET_LAST_EMP_DATAResponse (riferimento) Deleteresponse DeleteResponse (riferimento)
Salvare il file CompositeSchema.xsd .
Definizione di messaggi e tipi di messaggio
Lo schema composito creato nell'ultimo passaggio descrive i "tipi" necessari per i messaggi in un'orchestrazione. Un messaggio è in genere una variabile, il tipo per cui è definito dallo schema corrispondente. È ora necessario creare messaggi per l'orchestrazione e collegarli allo schema creato nel passaggio precedente.
Per creare messaggi e collegare allo schema
Aggiungere un'orchestrazione al progetto BizTalk. Da Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto BizTalk, scegliere Aggiungi e quindi fare clic su Nuovo elemento. Digitare un nome per l'orchestrazione BizTalk e quindi fare clic su Aggiungi.
Aprire la finestra Visualizzazione orchestrazione del progetto BizTalk, se non è già aperta. A tale scopo, fare clic su Visualizza, scegliere Altre finestre e quindi fare clic su Visualizzazione orchestrazione.
In Visualizzazione orchestrazione fare clic con il pulsante destro del mouse su Messaggi e quindi scegliere Nuovo messaggio.
Fare clic con il pulsante destro del mouse sul messaggio appena creato e quindi selezionare Finestra proprietà.
Nel riquadro Proprietà per il Message_1 eseguire le operazioni seguenti:
Usare Per Identificatore Digitare Request
Tipo di messaggio Nell'elenco a discesa espandere Schemi, quindi selezionare CompositeOp.CompositeSchema.Request, dove CompositeOp è il nome del progetto BizTalk. CompositeSchema è lo schema creato manualmente per le operazioni composte. Ripetere il passaggio 2 per creare un nuovo messaggio. Nel riquadro Proprietà per il nuovo messaggio eseguire le operazioni seguenti:
Usare Per Identificatore Digitare Response
Tipo di messaggio Nell'elenco a discesa espandere Schemi, quindi selezionare CompositeOp.CompositeSchema.RequestResponse.
Configurazione dell'orchestrazione
È necessario creare un'orchestrazione BizTalk per usare BizTalk Server per eseguire operazioni composte su SQL Server. In questa orchestrazione si rilascia un messaggio di richiesta in una posizione di ricezione definita. Il messaggio di richiesta deve essere conforme allo schema composito creato in precedenza. L'adattatore SQL usa questo messaggio e lo passa a SQL Server. La risposta da SQL Server viene salvata in un'altra posizione. È necessario includere rispettivamente le forme Invia e Ricezione per inviare messaggi a SQL Server e ricevere risposte. Un'orchestrazione di base per l'esecuzione di operazioni composte è simile alla seguente:
Aggiunta di forme di messaggio
Assicurarsi di specificare le proprietà seguenti per ognuna delle forme del messaggio. I nomi elencati nella colonna Shape sono i nomi delle forme del messaggio visualizzate nell'orchestrazione appena menzionata.
Forma | Tipo di forma | Proprietà |
---|---|---|
ReceiveMessage | Ricevere | - Impostare nome su ReceiveMessage - Impostare Attiva su True |
SendMessage | Send | - Impostare nome su SendMessage |
ReceiveResponse | Ricevere | - Impostare nome su ReceiveResponse - Impostare Attiva su False |
SendResponse | Send | - Impostare nome su SendResponse |
Aggiunta di porte
Assicurarsi di specificare le proprietà seguenti per ognuna delle porte logiche. I nomi elencati nella colonna Porta sono i nomi delle porte visualizzate nell'orchestrazione.
Porta | Proprietà |
---|---|
MessageIn | - Impostare identificatore su MessageIn - Impostare tipo su MessageInType - Impostare il modello di comunicazionesu unidirezionale - Impostare la direzione di comunicazione su Ricezione |
LOBPort | - Impostare identificatore su LOBPort - Impostare tipo su LOBPortType - Impostare il modello di comunicazione su Request-Response - Impostare la direzione di comunicazione su Send-Receive |
ResponseOut | - Impostare identificatore su ResponseOut - Impostare tipo su ResponseOutType - Impostare il modello di comunicazionesu unidirezionale - Impostare la direzione di comunicazione su Invia |
Specificare i messaggi per le forme di azione e connetterli alle porte
La tabella seguente specifica le proprietà e i relativi valori che è necessario impostare per specificare i messaggi per le forme di azione e collegare i messaggi alle porte. I nomi elencati nella colonna Shape sono i nomi delle forme del messaggio visualizzate nella orchestrazione menzionata in precedenza.
Forma | Proprietà |
---|---|
ReceiveMessage | - Impostare messaggio su richiesta - Impostare l'operazione su MessageIn.CompositeOp.Request |
SendMessage | - Impostare messaggio su richiesta - Impostare l'operazione su LOBPort.CompositeOp.Request |
ReceiveResponse | - Impostare messaggio su risposta - Impostare l'operazione su LOBPort.CompositeOp.Response |
SendResponse | - Impostare messaggio su risposta - Impostare l'operazione su ResponseOut.CompositeOp.Request |
Dopo aver specificato queste proprietà, le forme e le porte del messaggio sono connesse e la orchestrazione è stata completata.
È ora necessario compilare la soluzione BizTalk e distribuirla in un BizTalk Server. Per altre informazioni, vedere Creazione e esecuzione di orchestrazioni.
Configurazione dell'applicazione BizTalk
Dopo aver distribuito il progetto BizTalk, l'orchestrazione creata in precedenza è elencata nel riquadro Orchestrazioni nella console di amministrazione di BizTalk Server. È necessario usare la console di amministrazione BizTalk Server per configurare l'applicazione. Per una procedura dettagliata, vedere Procedura dettagliata: Distribuzione di un'applicazione BizTalk di base.
La configurazione di un'applicazione comporta:
Selezione di un host per l'applicazione.
Mapping delle porte create nell'orchestrazione alle porte fisiche nella console di amministrazione di BizTalk Server. Per questa orchestrazione è necessario:
Definire un percorso sul disco rigido e una porta file corrispondente in cui verrà visualizzato un messaggio di richiesta. L'orchestrazione BizTalk utilizzerà il messaggio di richiesta e lo invierà al database di SQL Server.
Definire un percorso sul disco rigido e una porta file corrispondente in cui l'orchestrazione BizTalk rilascia il messaggio di risposta contenente la risposta dal database di SQL Server.
Definire una porta di trasmissione fisica WCF-Custom o WCF-SQL per inviare messaggi al database di SQL Server. Poiché le operazioni che fanno parte dell'operazione composita vengono eseguite in una singola transazione, assicurarsi che la proprietà di associazione UseAmbientTransaction sia impostata su True.
È anche necessario specificare l'azione nella porta di invio. L'azione per un'operazione composita è "CompositeOperation". Per informazioni su come creare porte, vedere Configurare manualmente un'associazione di porte fisiche all'adapter SQL. Per altre informazioni su come specificare azioni per le porte, vedere Configurare l'azione SOAP per l'adapter SQL.
Nota
La generazione dello schema usando il componente aggiuntivo Del progetto BizTalk del servizio adapter crea anche un file di associazione contenente informazioni sulle porte e sulle azioni da impostare per tali porte. È possibile importare questo file di associazione dalla console di amministrazione di BizTalk Server per creare porte di invio (per le chiamate in uscita) o le porte di ricezione (per le chiamate in ingresso). Per altre informazioni, vedere Configurare un'associazione di porte fisiche usando un file di associazione di porte per l'uso dell'adapter SQL. Se si importa questo file di associazione, l'azione sulla porta di trasmissione WCF-Custom o WCF-SQL è impostata su un'azione dinamica che coinvolge tutte le operazioni selezionate nel componente aggiuntivo Consume Adapter Service durante la generazione dello schema. Per un'operazione composita, è necessario sostituire l'azione dinamica con "CompositeOperation".
Avvio dell'applicazione
È necessario avviare l'applicazione BizTalk per eseguire operazioni composte nel database SQL Server. Per istruzioni sull'avvio di un'applicazione BizTalk, vedere Come avviare un'orchestrazione.
In questa fase assicurarsi di:
La porta di ricezione FILE per ricevere messaggi di richiesta per l'orchestrazione è in esecuzione.
La porta di invio FILE per ricevere i messaggi di risposta dall'orchestrazione è in esecuzione.
La porta di trasmissione WCF-Custom o WCF-SQL per inviare messaggi al database SQL Server è in esecuzione.
L'orchestrazione BizTalk per l'operazione è in esecuzione.
Esecuzione dell'operazione
Dopo aver eseguito l'applicazione, è necessario eliminare un messaggio di richiesta nel percorso di ricezione FILE. Lo schema per il messaggio di richiesta deve essere conforme allo schema per le operazioni composte create in precedenza. Ad esempio, un messaggio di richiesta che inserisce un record nella tabella EMPLOYEE, richiama la stored procedure GET_LAST_EMP_DATA ed elimina un record dalla tabella EMPLOYEE:
<Request xmlns="http://CompositeTest.CompositeSchema">
<Insert xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Rows>
<Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">
<Name>John</Name>
<Designation>Manager</Designation>
<Salary>100000</Salary>
</Employee>
</Rows>
</Insert>
<GET_LAST_EMP_DATA xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo" />
<Delete xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Rows>
<Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">
<Name>John</Name>
</Employee>
</Rows>
</Delete>
</Request>
Per altre informazioni sullo schema del messaggio di richiesta per l'esecuzione di operazioni composte nel database SQL Server tramite l'adattatore SQL, vedere Schemi di messaggi per operazioni composite.
L'orchestrazione usa il messaggio e lo invia al database di SQL Server. La risposta dal database SQL Server viene salvata nell'altra posizione FILE definita come parte dell'orchestrazione. Ad esempio, la risposta dal database di SQL Server per il messaggio di richiesta precedente è:
<?xml version="1.0" encoding="utf-8" ?>
<RequestResponse xmlns="http://CompositeTest.CompositeSchema">
<InsertResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<InsertResult>
<long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">10080</long>
</InsertResult>
</InsertResponse>
<GET_LAST_EMP_DATAResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo">
<GET_LAST_EMP_DATAResult>
<DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data">
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element msdata:IsDataSet="true" name="NewDataSet">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="Employee_ID" type="xs:int" />
<xs:element minOccurs="0" name="Name" type="xs:string" />
<xs:element minOccurs="0" name="DOJ" type="xs:dateTime" />
<xs:element minOccurs="0" name="Designation" type="xs:string" />
<xs:element minOccurs="0" name="Job_Description" type="xs:string" />
<xs:element minOccurs="0" name="Photo" type="xs:base64Binary" />
<xs:element minOccurs="0" name="Rating" type="xs:string" />
<xs:element minOccurs="0" name="Salary" type="xs:decimal" />
<xs:element minOccurs="0" name="Last_Modified" type="xs:base64Binary" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NewTable>
<Employee_ID>10080</Employee_ID>
<Name>John</Name>
<Designation>Manager</Designation>
<Salary>100000.00</Salary>
<Last_Modified>AAAAAAAAF40=</Last_Modified>
</NewTable>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
</GET_LAST_EMP_DATAResult>
<ReturnValue>0</ReturnValue>
</GET_LAST_EMP_DATAResponse>
<DeleteResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<DeleteResult>1</DeleteResult>
</DeleteResponse>
</RequestResponse>
La risposta precedente contiene più set di risultati corrispondenti alle diverse operazioni eseguite come parte dell'operazione composita. Ad esempio, l'elemento contiene 10080, ovvero l'identificatore InsertResult
univoco per il record appena aggiunto.
Procedure consigliate
Dopo aver distribuito e configurato il progetto BizTalk, è possibile esportare le impostazioni di configurazione in un file XML denominato file di associazione. Dopo aver generato un file di associazione, è possibile importare le impostazioni di configurazione dal file, in modo che non sia necessario creare elementi, ad esempio porte di invio e porte di ricezione per la stessa orchestrazione. Per altre informazioni sui file di associazione, vedere Riutilizzare le associazioni degli adattatori.