Esecuzione del campione di gestore eccezioni personalizzato per correzione e nuovo invio
L'esempio Di ripristino e ripristino dell'eccezione personalizzata dimostra una tecnica estremamente efficace per l'integrazione dell'intervento umano nei processi di applicazione basati su ESB e Microsoft BizTalk e implementa un modello di progettazione utile. Il codice di esempio si integra facilmente nel sistema di gestione delle eccezioni ESB.
L'esempio illustra come usare un gestore di eccezioni personalizzato in un'orchestrazione. Quando un processo nell'orchestrazione (EAIProcess.odx) rileva un errore, il gestore eccezioni genera e pubblica un messaggio di errore ESB. Questo messaggio di errore include nel payload i messaggi (incluse le proprietà del contesto correlate a BizTalk) che erano "in anteprima" quando si è verificata l'eccezione e l'istanza corrente di System.Exception rilevata dal motore di orchestrazione BizTalk. Quando si verifica questo problema, un messaggio "Negato" e un messaggio "Approvato" vengono mantenuti con il messaggio di errore.
Una seconda orchestrazione denominata EAIProcessHandler.odx, distribuita in modo disaccoppiato e funge da gestore di eccezioni personalizzato, sottoscrive il codice di errore specifico generato nell'orchestrazione EAIProcess.odx e utilizza il messaggio di errore. Questo gestore eccezioni estrae i messaggi originali (come documenti tipizzato) e le istanze di System.Exception originariamente mantenute nel messaggio di errore.
I messaggi originali diventano ora disponibili per l'elaborazione con tutte le proprietà di contesto originali. Il gestore di eccezioni personalizzato (EAIProcessHandler.odx) scrive quindi i messaggi "Negati" e "Approvati" nel file system nei percorsi seguenti:
Messaggio approvato:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.PostApproval
Messaggio negato per la riparazione e la resubmit:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.RepairSubmit
Messaggio negato:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.PostDecline
Il gestore eccezioni serializza il messaggio "Negato" per Ripristino e resubmit al file system usando un'istruzione di elaborazione di Microsoft InfoPath. Un modello di InfoPath consente all'utente di modificare il modulo e inviare di nuovo il risultato (vedere la figura 1), che avvia l'orchestrazione EAIProcess.odx che convalida il messaggio.
Figura 1
Messaggio di test generato dal modello di ripristino e resubmit di InfoPath
Inoltre, esiste una porta di trasmissione generica denominata ALL. Exceptions_FILE configurata per l'uso della pipeline GlobalFaultProcessor. Questa porta sottoscrive tutte le eccezioni nel sistema, sia i messaggi di routing dei messaggi bizTalk che i messaggi di errore ESB. Il framework di gestione eccezioni li normalizza tutti in un singolo formato e li serializza usando un'istruzione di elaborazione di InfoPath nella cartella \Source\Samples\Exception Handling\Test\Filedrop\All_Exceptions.
Installazione
Tutti gli esempi di gestione delle eccezioni usano lo stesso set di servizi di base e elementi dell'applicazione BizTalk. È pertanto necessario installare gli artefatti di esempio di gestione delle eccezioni una sola volta per poter eseguire tutti gli esempi di gestione delle eccezioni. Per informazioni su come installare gli esempi di gestione delle eccezioni, vedere Installazione degli esempi di gestione eccezioni.
Esecuzione dell'applicazione di esempio
Per eseguire l'esempio Di ripristino e ripristino dell'eccezione personalizzata
Prima di eseguire questo esempio per la prima volta, assicurarsi che il percorso di ricezione e l'URL della porta di invio puntino alle directory appropriate nella cartella \Source\Samples\Exception Handling\Test\Filedrop. Il percorso di ricezione deve specificare la cartella EAIProcess.RequestPort e gli URL della porta di trasmissione devono specificare le cartelle EAIProcess.PostApproval e EAIProcessHandler.PostDecline.
Se l'applicazione GlobalBank.ESB non è già in esecuzione, usare la console di amministrazione BizTalk per avviarla.
Avviare l'esempio copiando il file di esempio denominato Request_EAIProcessHandler.xml, situato nella cartella \Source\Samples\Exception Handling\Test\Data, nella cartella specificata per il percorso di ricezione EAIProcess.RequestPort_FILE: \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.RequestPort.
Aprire la cartella denominata EAIProcessHandler.PostDecline (nella cartella \Source\Samples\Exception Handling\Test\Filedrop). Verrà visualizzato il messaggio "Rifiutato*" generato dall'orchestrazione di gestione delle eccezioni.
Aprire la cartella denominata EAIProcessHandler.RepairSubmit (nella cartella \Source\Samples\Exception Handling\Test\Filedrop). Verrà visualizzato un messaggio "RepairSubmit" generato dall'orchestrazione di gestione delle eccezioni.
Fare doppio clic sul file RepairSubmit per aprirlo nel modello di InfoPath appropriato. Verrà visualizzato il messaggio pronto per la modifica e la resubmissione.
Modificare il valore del campo Unit Price da 0 a 2 e quindi fare clic sul pulsante Invia sulla barra degli strumenti del modulo InfoPath per inviare nuovamente il documento modificato a BizTalk per l'elaborazione. Il processo di invio usa un percorso di ricezione HTTP configurato per BizTalk.
Passare alla cartella EAIProcess.PostApproval (nella cartella \Source\Samples\Exception Handling\Test\Filedrop). Verrà ora visualizzato il documento "Approvazione*" contenente il valore aggiornato per il prezzo unitario.
Funzionamento dell'esempio
Il messaggio inviato attiva l'orchestrazione EAIProcess. Quando l'orchestrazione EAIProcess elabora il messaggio, tenta di dividere 1 per il prezzo unitario. Poiché il prezzo unitario è zero, si verifica un'eccezione divide per zero. Il codice nel gestore eventi dell'orchestrazione rileva questa eccezione e crea un messaggio di errore. La quantità di ordine nel messaggio è maggiore di 10, quindi la logica di business determina che questa eccezione ha un valore di campo FaultCode pari a 1000.
L'orchestrazione EAIProcess pubblica quindi il messaggio di errore nella finestra di messaggio BizTalk tramite una porta associata diretta e termina l'orchestrazione.
Orchestrazione del gestore di errori personalizzata denominata EAIProcessHandler, che sottoscrive i messaggi con un valore di campo FaultCode pari a 1000, seleziona il nuovo messaggio di errore. Il codice nell'orchestrazione crea il messaggio "Negato" e il file di InfoPath e quindi inserisce il codice nelle cartelle EAIProcessHandler.PostDecline e EAIProcessHandler.RepairSubmit pronte per l'intervento umano.