Procedura dettagliata: Uso di buste XML (di base)
In questo esempio viene illustrato il disassemblaggio di buste XML di base tramite l'implementazione parziale di un sistema di rilevamento degli errori fittizio. L'esempio soddisfa i requisiti seguenti:
I messaggi di errore vengono registrati in varie posizioni fisiche all'interno della società e inviati a una posizione centrale per essere elaborati in diversi sistemi back-end.
I messaggi di errore vengono scritti in formato XML.
Un messaggio di errore può essere inviato singolarmente senza busta o come batch contenuto all'interno di una busta.
Prerequisiti
Per questo esempio è necessario avere pratica nella creazione di progetti BizTalk, nella firma degli assembly, nonché nell'utilizzo della Console di amministrazione BizTalk Server per la visualizzazione di applicazioni e porte. È anche consigliabile avere familiarità con le idee presentate in Procedura dettagliata: Distribuzione di un'applicazione BizTalk di base.
Scopo dell'esempio
In questo esempio vengono elaborati messaggi in ingresso contenenti un singolo messaggio di errore o un batch di messaggi di errore definendo uno schema della busta e utilizzando la pipeline XmlDisassembler.
Esempio
Per creare l'esempio, attenersi alle procedure indicate nelle sezioni che seguono.
Creazione di un nuovo progetto BizTalk
Prima di creare una soluzione, è necessario creare un progetto BizTalk, verificare che presenti un nome sicuro e assegnargli un nome applicazione. L'assegnazione di un nome applicazione impedisce la distribuzione della soluzione nell'applicazione BizTalk predefinita.
Per creare e configurare un nuovo progetto BizTalk
Usare Visual Studio per creare un nuovo progetto BizTalk. Chiamare il progetto BasicXMLEnvelope.
Generare un file di chiavi e assegnarlo al progetto. Per altre informazioni su questa attività, vedere How to Configure a Strong Name Assembly Key File.For more information about this task, see How to Configure a Strong Name Assembly Key File.
Nelle proprietà di configurazione della distribuzione per il progetto assegnare un nome applicazione e impostare Riavvia istanze host su
True
. L'impostazione di questo flag indica all'host di cancellare eventuali istanze dell'assembly memorizzate nella cache.
Creazione di uno schema dell'errore
In questo passaggio viene creato uno schema dell'errore. Definisce il messaggio chiave del sistema.
Per creare uno schema dell'errore
Aggiungere un nuovo schema denominato "Error" al progetto.
Modificare lo spazio dei nomi di destinazione per lo schema in http://BasicXMLEnvelope.
Modificare la proprietà schema Element FormDefault nella categoria Avanzateimpostandola su Qualificato. Ciò indica che gli elementi dichiarati in locale devono essere qualificati dallo spazio dei nomi di destinazione in un documento dell'istanza.
Ridenominare il nodo radice "Error" e creare cinque elementi secondari con i tipi indicati:
ID, xs:int
Type, xs:int
Priority, xs:string
Description, xs:string
ErrorDateTime, xs:string
Lo schema dovrebbe avere l'aspetto sotto illustrato:
Creare un messaggio di esempio per questo schema. Ciò viene utilizzato per verificare che singoli messaggi al di fuori della busta vengono elaborati correttamente. Di seguito viene riportato un esempio di messaggio di esempio:
<Error xmlns="http://BasicXMLEnvelope"> <ID>1</ID> <Type>5</Type> <Priority>Low</Priority> <Description>Sprocket widget prints reports slowly.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error>
Salvare il messaggio in un file nella directory del progetto.
Creazione di uno schema della busta
La busta contiene uno o più messaggi di errore. In questo esempio, la busta non ha proprietà ed elementi specifici.
Per creare uno schema della busta
Aggiungere un nuovo schema denominato "Envelope" al progetto BasicXMLEnvelope.
Modificare lo spazio dei nomi di destinazione in http://BasicXMLEnvelope.
Modificare il nome del nodo radice da "Root" a "Envelope".
Contrassegnare lo schema come schema della busta. Fare clic sul <nodo Schema> . Nel riquadro Proprietà impostare la proprietà di riferimento dello schema Envelope su
OK
.Impostare la proprietà Body XPath . A tale scopo, fare clic sul nodo Envelope . Nella Finestra Proprietà fare clic sul pulsante con i puntini di sospensione (...) nella proprietà Body XPath, selezionare Envelope e quindi fare clic su OK.
Aggiungere un elemento secondario al nodo Busta. Il messaggio di errore sarà contenuto in questo elemento. Lo schema dovrebbe avere l'aspetto sotto illustrato:
Creare un messaggio di esempio contenente una busta e uno o più messaggi di esempio. Di seguito viene riportato un messaggio di esempio:
<Envelope xmlns="http://BasicXMLEnvelope"> <Error> <ID>102</ID> <Type>0</Type> <Priority>High</Priority> <Description>Sprocket query fails.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> <Error> <ID>16502</ID> <Type>2</Type> <Priority>Low</Priority> <Description>Time threshold exceeded.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> </Envelope>
Salvare il messaggio in un file nella directory del progetto.
Distribuire e configurare porte di trasmissione e di ricezione
Con gli schemi creati, è necessario compilare e distribuire il progetto. Una volta distribuito, è possibile utilizzare la Console di amministrazione BizTalk Server per configurare le porte di invio e ricezione.
Per distribuire BasicXMLEnvelope
In Visual Studio scegliere Distribuisci BasicXMLEnvelope dal menu Compila. Ciò ne consente la generazione e la distribuzione in BizTalk Server come applicazione "BasicXMLEnvelope".
Nella console di amministrazione di BizTalk Server espandere il gruppo Applicazioni per verificare che BasicXMLEnvelope sia presente come applicazione personalizzata.
Per configurare la porta di ricezione
Usare Esplora risorse per creare una directory denominata "Receive" nella directory del progetto BasicXMLEnvelope .
Nella console di amministrazione di BizTalk Server espandere l'applicazione BasicXMLEnvelope, fare clic con il pulsante destro del mouse su Porte di ricezione, scegliere Nuovoe quindi fare clic su Porta di ricezione unidirezionale.
Nella finestra di dialogo Proprietà porta di ricezione impostare il nome della porta su "Receive".
Fare clic con il pulsante destro del mouse su Percorsi di ricezione, quindi scegliere Nuovo per aggiungere una porta di ricezione. Denominare la nuova porta "ReceiveError". Impostare la pipeline di ricezione su XMLReceive. Per Tipo di trasporto selezionare FILE e quindi fare clic su Configura.
Selezionare la directory di ricezione creata in precedenza e fare clic su OK. A questo punto la porta di ricezione risulta configurata. Fare clic su OK per chiudere.
Per configurare la porta di trasmissione
Usare Esplora risorse per creare una directory denominata "Invia" nella directory del progetto BasicXMLEnvelope .
Nella console di amministrazione di BizTalk Server espandere l'applicazione BasicXMLEnvelope, fare clic con il pulsante destro del mouse su Porte di trasmissione, scegliere Nuovoe quindi fare clic su Statico unidirezionale.
Nella finestra di dialogo Proprietà porta di trasmissione impostare il nome della porta su "Invia".
Per Tipo di trasporto selezionare FILE e quindi fare clic su Configura. Impostare la cartella di destinazione sulla directory di invio creata in precedenza e fare clic su OK.
Fare clic su Filtri e aggiungere un singolo filtro:
- BTS. MessageType == http://BasicXMLEnvelope#Error
Fare clic su OK per completare la configurazione della porta di trasmissione. A questo punto la porta di trasmissione risulta configurata.
Esecuzione dell'esempio
È ora possibile eseguire l'esempio. Dopo aver utilizzato la console di gestione BizTalk Server per avviare l'applicazione BasicXMLEnvelope, copiare i file di test nell'indirizzo di ricezione e osservare il risultato dell'operazione nell'indirizzo di trasmissione.
Per eseguire l'esempio BasicXMLEnvelope
Nella console di amministrazione di BizTalk Server fare clic con il pulsante destro del mouse sull'applicazione BasicXMLEnvelope e quindi scegliere Avvia. In questo modo vengono integrate e avviate le porte di trasmissione e ricezione.
Rilasciare ogni file di esempio nella directory di ricezione. Se si utilizzano gli esempi forniti in precedenza, sarà necessario trovare tre singoli messaggi di errore nel percorso di trasmissione al termine dell'elaborazione.
Estensione dell'esempio
È possibile estendere l'esempio per includere altri requisiti. In questa sezione vengono illustrati due scenari comuni:
Se un batch di errori viene inviato all'interno di una busta, errori nei singoli messaggi nel disassemblaggio non deve impedire ad altri messaggi non di errore dall'essere ulteriormente elaborati.
Gli errori devono essere recapitati a percorsi differenti in base alla priorità di errore. Messaggi ad alta priorità vengono accelerati mentre altre priorità vengono gestite attraverso i canali normali.
Nelle sezioni seguenti l'esempio viene esteso per gestire tali requisiti.
Elaborazione di interscambio reversibile
BizTalk Server supporta l'elaborazione dell'interscambio recuperabile. Utilizzando questa funzionalità, è possibile assicurare che nei batch dei messaggi gli errori si verificano a livello individuale nel disassemblaggio e non a livello di batch.
Per configurare l'esempio per l'elaborazione di interscambio reversibile
Nella console di amministrazione di BizTalk Server espandere l'applicazione BasicXMLEnvelope, fare clic su Porte di ricezione, quindi fare doppio clic sulla porta di ricezione. Si tratta della porta creata in precedenza.
Nella finestra di dialogo Proprietà porta di ricezione fare clic su Percorsi di ricezione. Fare clic su Proprietà per visualizzare la finestra di dialogo Proprietà posizione ricezione ReceiveError . Fare clic sul pulsante con i puntini di sospensione (...) per la pipeline di ricezione.
Nella finestra di dialogo Configura pipeline - XMLReceive impostare la proprietà Elaborazione interscambio ripristinabile su
True
e quindi fare clic su OK.Fare clic su OK per chiudere la finestra di dialogo Proprietà posizione di ricezione , quindi fare clic su OK per chiudere la finestra di dialogo Proprietà porta di ricezione .
Per creare un file di esempio ed eseguire l'esempio
Per creare un file di esempio, creare una copia del file di esempio di busta creato nell'esempio, aggiungere uno spazio dei nomi non esistente a una delle istanze Error, quindi salvare il file:
<Envelope xmlns="http://BasicXMLEnvelope"> <Error> <ID>102</ID> <Type>0</Type> <Priority>High</Priority> <Description>Sprocket query fails to return any sprockets even though some exist</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> <Error xmlns="http://ThisIsAnError"> <ID>16502</ID> <Type>2</Type> <Priority>Low</Priority> <Description>Time threshold exceeded.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> </Envelope>
Nella console di amministrazione di BizTalk Server fare clic su Applicazioni e verificare che l'applicazione BasicXMLEnvelope sia in esecuzione.
Eliminare il messaggio nell'indirizzo di ricezione. Dopo l'elaborazione, è necessario individuare il primo messaggio nel percorso di trasmissione e il secondo, a bassa priorità, nella coda degli elementi sospesi.
Routing basato sul contenuto (CBR)
È possibile utilizzare il routing basato sul contenuto per indirizzare i messaggi in base al contenuto. In questo scenario, il routing è basato sulla priorità, con i messaggi a priorità alta verso un indirizzo di trasmissione i messaggi con priorità media o bassa a un indirizzo di trasmissione differente.
Per estendere l'esempio, è necessario completare le operazioni seguenti:
Alzare di livello il campo Priorità nello schema Degli errori nel progetto BasicXMLEnvelope. Il routing basato sul contenuto si basa su proprietà innalzate di livello per indirizzare i messaggi. Per altre informazioni, vedere Promozione delle proprietà.
Creare e configurare due porte di trasmissione aggiuntive. Le porte utilizzano un filtro per assicurare la ricezione dei messaggi appropriati.
Per innalzare di livello il campo Priorità nello schema Errore
Con il progetto BasicXMLEnvelope aperto in Visual Studio, aprire lo schema Errore ed espandere il nodo Errore .
Fare clic con il pulsante destro del mouse sull'elemento Priority , scegliere Alza di livello e quindi fare clic su Alzare di livello rapido.
Fare clic su OK per confermare l'aggiunta di un nuovo schema di proprietà per le proprietà alzate di livello.
In Visual Studio, in Esplora soluzioni, aprire il nuovo schema della proprietà PropertySchema.xsd. Rimuovere "Field1" dallo schema.
Ricompilare e ridistribuire la soluzione. Scegliere Distribuisci BasicXMLEnvelope dal menu Genera.
Il progetto è stato configurato per la reimpostazione dell'istanza host al momento della ridistribuzione della soluzione. Se ciò è stato modificato, sarà necessario arrestare e riavviare l'host.
Per configurare la porta di trasmissione per una priorità media o bassa
Usare Esplora risorse per creare una directory denominata "SendLowMediumPriority" nella directory del progetto BasicXMLEnvelope .
Nella console di amministrazione di BizTalk Server espandere l'applicazione BasicXMLEnvelope, fare clic con il pulsante destro del mouse su Porte di trasmissione, scegliere Nuovoe quindi fare clic su Statico unidirezionale.
Nella finestra di dialogo Proprietà porta di trasmissione impostare il nome della porta su "SendLowMediumPriority".
Per Tipo di trasporto selezionare FILE e quindi fare clic su Configura. Impostare la cartella di destinazione sulla directory creata in precedenza. Fare clic su OK per chiudere.
Fare clic su Filtri e aggiungere tre espressioni di filtro:
BTS. MessageType == http://BasicXMLEnvelope#Error e
BasicXMLEnvelope.PropertySchema.Priority == Low Or
BasicXMLEnvelope.PropertySchema.Priority == Medium
Fare clic su OK per completare la configurazione della porta di trasmissione con priorità bassa e media.
Per configurare la porta di trasmissione su una priorità alta
Usare Esplora risorse per creare una directory denominata "SendHighPriority" nella directory del progetto BasicXMLEnvelope .
Nella console di amministrazione di BizTalk Server espandere l'applicazione BasicXMLEnvelope, fare clic con il pulsante destro del mouse su Porte di trasmissione, scegliere Nuovoe quindi fare clic su Statico unidirezionale.
Nella finestra di dialogo Proprietà porta di trasmissione impostare il nome della porta su "SendHighPriority".
Per Tipo di trasporto selezionare FILE e quindi fare clic su Configura. Impostare la cartella di destinazione sulla directory creata in precedenza. Fare clic su OK per chiudere.
Fare clic su Filtri e aggiungere due espressioni di filtro:
BTS. MessageType == http://BasicXMLEnvelope#Error e
BasicXMLEnvelope.PropertySchema.Priority == High
Fare clic su OK per completare la configurazione della porta di trasmissione con priorità elevata.
Per sottoporre a test la soluzione di routing
Nella console di amministrazione di BizTalk Server espandere il gruppo Applicazioni, fare clic con il pulsante destro del mouse sull'applicazione BasicXMLEnvelope e quindi scegliere Avvia. Quando viene richiesto di confermare, fare clic su Avvia. Ciò consente di integrare le nuove porte di trasmissione.
Eliminare il messaggio di testo nell'indirizzo di ricezione. Si noti in che modo i messaggi di errore vengono indirizzati a indirizzi di trasmissione differenti:
I messaggi di errori che hanno priorità bassa, media o alta e che vengono elaborati correttamente verranno indirizzati all'indirizzo di trasmissione di origine (configurato nell'esempio principale) e all'indirizzo di trasmissione in base alla priorità. Per i messaggi con priorità bassa o media, viene visualizzata una copia nell'indirizzo di trasmissione di origine e nell'indirizzo di trasmissione Bassa/Media.
Se l'elaborazione di interscambio reversibile è attivata, il messaggio di errore non riuscito non verrà indirizzato e il messaggio di errore senza errori verrà indirizzato correttamente come previsto. Il messaggio non riuscito non viene indirizzato in quanto il tipo di messaggio non corrisponde al tipo utilizzato nei filtri configurati.
Vedere anche
Elaborazione di interscambio reversibile
Promozione di proprietà
CBRSample (esempio di BizTalk Server)