Condividi tramite


Compensation (esempio di BizTalk Server)

Nell'esempio Di compensazione viene illustrato come utilizzare la forma Compensat in un'orchestrazione.

Scopo dell'esempio

In questo esempio viene illustrato come compensare la transazione di cui è già stato eseguito il commit nell'orchestrazione tramite la sequenza di passaggi seguente:

  1. Immettere i dati dei clienti nel modulo di InfoPath e inviarli a un'orchestrazione esposta come servizio Web.

  2. L'orchestrazione include due azioni parallele: una restituisce un riconoscimento al modulo di InfoPath mentre l'altra aggiorna i database Northwind e BTSCompensationSampleMailingList.

  3. Nella seconda azione, l'orchestrazione esegue il mapping del messaggio in arrivo a un formato di messaggio dell'applicazione CRM (Customer Relationship Management) e quindi aggiorna la tabella Customers nel database Northwind. In seguito viene aggiornata la tabella Mailing List del database BTSCompensationSampleMailingList.

  4. Se uno dei due aggiornamenti non riesce, le modifiche apportate al database Northwind vengono compensate con una chiamata a un assembly esterno per riscrivere i dati originali dei clienti nel database.

Progettazione e finalità dell'esempio

Una forma Ambito viene utilizzata principalmente per l'esecuzione transazionale e la gestione delle eccezioni, inclusa la compensazione. Un ambito è costituito da due blocchi. Il primo è il blocco del contesto, mentre il secondo può essere costituito da uno o più blocchi di gestione delle eccezioni o di compensazione. Questa configurazione è simile all'istruzione try-catch nel linguaggio di programmazione .NET. L'orchestrazione UpdateContact.odx include due operazioni parallele. Nel ramo a destra, il blocco try è la forma Ambito denominata Sistemi back-end aggiornati, che ha un tipo di transazione Long-Running e un identificatore di transazione Upd_Backend. Più in basso nel flusso è presente un blocco catch che rileva l'eccezione generale e avvia la compensazione.

Per altre informazioni sulla forma Ambito , vedere Ambiti. Vedere anche Come configurare la forma ambito.

Nota

Per impostare il tipo di transazione su Atomica o A esecuzione prolungata, è necessario che anche l'orchestrazione sia una transazione a esecuzione prolungata.

Nel blocco try sono presenti due ambiti denominati Update CRM e Update Mailing. In entrambi i casi si tratta di transazioni atomiche. L'ambito Update CRM contiene un blocco try e un blocco di compensazione. Il blocco try aggiorna il database Northwind tramite una chiamata di metodo a un assembly esterno. Il blocco di compensazione è quello in cui si verifica l'azione di compensazione. Quando viene generata un'eccezione nell'ambito Update Backend Systems, il codice della forma Undo CRM Expression aggiorna il record ripristinandone lo stato originale. Viene attivata dalla forma Compensato nel blocco Catch Exception.

Nota

Le transazioni atomiche garantiscono il rollback automatico di eventuali aggiornamenti parziali nel caso di un errore durante l'aggiornamento transazionale e la cancellazione degli effetti della transazione (ad eccezione degli effetti di chiamate .NET eseguite nella transazione).

Nota

Il commit di una transazione a esecuzione prolungata viene considerato eseguito quando l'ultima istruzione in essa contenuta è stata completata. In caso di interruzione di una transazione non viene eseguito alcun rollback automatico dello stato. È possibile conseguire questo risultato a livello di codice tramite i gestori di eccezioni e compensazione illustrati in questo esempio.

Nel blocco catch è presente una forma Ritardo impostata per dieci secondi. che ritarda l'azione di compensazione. Esiste anche una forma Compensata che avvia l'azione di compensazione nella transazione Upd_Backend.

Quando l'orchestrazione riceve il messaggio di input, vengono eseguite le operazioni seguenti:

  1. L'assembly UpdateCrm aggiorna una riga nel database Northwind.

  2. L'assembly UpdateMailingList aggiorna un record corrispondente nel database BTSCompensationSampleMailingList.

  3. In caso di errore durante l'aggiornamento del database Northwind, viene generata un'eccezione e l'orchestrazione chiude il processo.

  4. In caso di errore durante l'aggiornamento del database BTSCompensationSampleMailingList, viene generata un'eccezione e si verifica un ritardo di dieci secondi prima che i dati originali dei clienti vengano riscritti nel database Northwind.

Percorso dell'esempio

<Percorso esempi>\Orchestrations\Compensation\

Nella seguente tabella sono riportati i file inclusi nell'esempio e ne viene descritto lo scopo.

File Descrizione
Cleanup.bat File batch utilizzato per disinstallare l'esempio.
CompensationOrchestration.btproj Progetto di orchestrazione.
CompensationSample.sln Soluzione di esempio.
CompensationSampleBinding.xml Dati di binding per l'orchestrazione (utilizzati durante l'installazione).
ContactInfo.xsd Schema messaggi di informazioni di contatto.
ContactInfo.xsx File di layout di Progettazione orchestrazioni.
CreateSQLDataStore.sql Script SQL utilizzato per creare e popolare il database di esempio.
CrmSchema.xsd Schema messaggi di aggiornamento CRM.
MailingListSchema.xsd Schema di aggiornamento di messaggio di lista di distribuzione.
RemoveVirDir.vbs Script di Microsoft Visual Basic Scripting Edition (VBScript) per la rimozione di directory virtuali e fisiche dei servizi Web (utilizzato durante la disinstallazione).
Request2Crm.btm Mappa del messaggio per la conversione da richiesta (informazioni di contatto) in messaggio di aggiornamento CRM.
Request2MailingList.btm Mappa del messaggio per la conversione da richiesta (informazioni di contatto) in messaggio di lista di distribuzione.
Setup.bat File batch per l'installazione dell'esempio.
UpdateContact.odx File di orchestrazione.
UpdateRequest2UpdateResponse.btm Mappa del messaggio per la conversione da richiesta (informazioni di contatto) in messaggio di risposta.
UpdateResponse.xsd Schema messaggi di risposta.
InfoPath\Contact Info Update.xsn File di Microsoft InfoPath utilizzato per l'invio di moduli al servizio Web di orchestrazione.
UpdateCrm\AssemblyInfo.cs File di origine di informazioni per l'assembly UpdateCrm (l'assembly UpdateCrm aggiorna il database Northwind).
UpdateCrm\UpdateCrm.cs Codice sorgente principale per l'assembly UpdateCrm.
UpdateCrm\UpdateCRM.csproj File di progetto UpdateCrm.
UpdateMailingList\AssemblyInfo.cs File di origine di informazioni per l'assembly UpdateMailingList (l'assembly UpdateMailingList aggiorna il database di esempio).
UpdateMailingList\UpdateMailingList.cs Codice sorgente principale per l'assembly UpdateMailingList.
UpdateMailingList\UpdateMailingList.csproj File di progetto UpdateMailingList.

Compilazione e inizializzazione dell'esempio

Per compilare e inizializzare l'esempio Compensation

  1. In una finestra di comando di Visual Studio passare alla cartella seguente:

    <Percorso esempi>\Orchestrations\Compensation\

  2. Eseguire Setup.bat. Verranno eseguite le operazioni seguenti:

    • Compilazione e distribuzione dell'assembly di esempio.

    • Quando si avvia la Pubblicazione guidata servizi Web BizTalk, eseguire manualmente le operazioni seguenti:

    1. Nella pagina Pubblicazione guidata servizi Web BizTalk fare clic su Avanti.

    2. Nella pagina Crea servizio Web selezionare Pubblica orchestrazione BizTalk come servizi Web e quindi fare clic su Avanti.

    3. Nella pagina Assembly BizTalk individuare e selezionare <Samples Path (Percorso> esempi)\Orchestrations\Compensation\bin\Release\CompensationOrchestration.dll e quindi fare clic su Avanti.

    4. Nella pagina Orchestrazioni e porte fare clic su Avanti.

    5. Nella pagina Proprietà servizio Web , in Spazio dei nomi di destinazione del servizio Web digitare http://Microsoft.BizTalk.Samples.Compensation/e quindi fare clic su Avanti.

    6. Nella pagina Progetto servizio Web digitare in Percorsohttp://localhost/CompensationOrchestrationWebServiceProxy.

    7. Selezionare la casella di controllo Consenti accesso anonimo al servizio Web .

    8. Selezionare la casella di controllo Crea percorso di ricezione BizTalk nell'applicazione seguente .

    9. Nel menu a discesa Create BizTalk receive location (Crea percorso di ricezione BizTalk) nel menu a discesa dell'applicazione seguente selezionare BizTalk Application 1 dall'elenco a discesa e quindi fare clic su Avanti.

    10. Nella pagina Riepilogo progetto servizio Web fare clic su Crea.

    11. Nella pagina Completamento della Pubblicazione guidata servizi Web BizTalk fare clic su Fine.

  3. A questo punto vengono create e associate porte, viene creato il database back-end per l'esempio e vengono aggiunti gli assembly C# alla Global Assembly Cache.

    Nota

    Prima di provare a eseguire l'esempio, è necessario verificare che BizTalk Server non abbia segnalato errori durante il processo di generazione e inizializzazione.

Esecuzione dell'esempio

Dopo la compilazione e l'inizializzazione dell'esempio, tenere presenti le considerazioni seguenti prima di eseguirlo:

  • Se si esegue questo esempio in Windows Server 2008 SP2 o Windows Server 2008 R2, è necessario creare un pool di applicazioni IIS e impostarne l'identità su un account membro del gruppo Windows Utenti applicazione BizTalk. È inoltre necessario aggiornare la directory virtuale del servizio Web di orchestrazione per l'esecuzione all'interno del pool di applicazioni.

  • Aggiungere l'account ASPNET al gruppo Utenti host BizTalk di tipo Isolato.

  • Concedere al gruppo Utenti applicazione BizTalk db_owner l'autorizzazione per i database BTSCompensationSampleMailingList e Northwind .

  • Se BizTalk Server non è installato nel percorso predefinito (unità:\Programmi\Microsoft BizTalk Server <version>\), è necessario pubblicare il modulo Contact Info Update.xsn prima di usarlo. A tale scopo, effettuare le operazioni riportate di seguito.

    Per pubblicare il modulo di InfoPath

    1. In Internet Explorer scegliere Opzioni Internet dal menu Strumenti.

    2. Nella scheda Sicurezza fare clic su Internet e quindi su Livello personalizzato.

    3. Nella sezione Varie verificare che l'impostazione Accedere alle origini dati tra domini sia abilitata e quindi fare clic su OK. Questa impostazione è necessaria per l'esecuzione del codice di script della soluzione interfaccia utente di InfoPath.

    4. In Esplora risorse passare a <Percorso> esempi\Orchestrazioni\Compensazione\InfoPath, fare clic con il pulsante destro del mouse su Contact Info Update.xsn e quindi scegliere Progetta.

    5. Verrà visualizzata la soluzione di InfoPath per l'aggiornamento delle informazioni di contatto in modalità progettazione.

    6. Nell'applicazione Info Contact Info Update di InfoPath scegliere Pubblica dal menu File.

    7. Verrà visualizzata la Pubblicazione guidata.

    8. Selezionare To a shared folder on this computer or on a network and publish the solution to the path Samples Path\Orchestrations\Compensation\InfoPath\Contact Info Update.xsn.xsn.select To a shared folder on this computer or on a network and publish the solution to the path <Samples Path>\Orchestrations\Compensation\InfoPath\Contact Info Update.xsn.

    9. Chiudere la modalità progettazione di InfoPath.

  • A questo punto è possibile eseguire l'esempio.

    Per eseguire l'esempio Compensation

    1. Fare doppio clic su Contact Info Update.xsn per aprirlo in InfoPath.

    2. Compilare il modulo per un account esistente in entrambi i database. Ad esempio, utilizzare un ID account esistente "ALFKI" della tabella Customers di Northwind.

    3. Scegliere Invia dal menu File e fare clic su Invia.

    4. Il documento di risposta dovrebbe essere visualizzato nella < cartella Samples Path>\Orchestrations\Compensation\Out e sia northwind che BTSCompensationSampleMailingList devono essere aggiornati con i nuovi dati del modulo di InfoPath.

      Nota

      È possibile scollegare il database BTSCompensationSampleMailingList o impostarlo offline per verificare l'azione di compensazione eseguita dall'orchestrazione. Si noti che il record viene aggiornato prima nel database Northwind. Quindi, quando l'orchestrazione tenta di aggiornare il database BTSCompensationSampleMailingList, essendo quest'ultimo scollegato, l'operazione non riesce. Pertanto, viene generata un'eccezione e si verifica un ritardo di dieci secondi prima che venga eseguita l'azione di compensazione per riscrivere i dati originali dei clienti nel database Northwind.

      Nota

      È possibile che venga restituito un errore "Accesso non riuscito per l'utente 'IIS APPPOOL\DefaultAppPool'. La causa potrebbe essere la mancata convalida dell'accesso al server basato su token. Per risolvere l'errore, creare un nuovo pool di applicazioni e utilizzarvi l'account di amministratore.

Disinstallazione dell'esempio

Per disinstallare l'esempio Compensation

  1. In una finestra di comando di Visual Studio passare alla cartella seguente:

    <Percorso esempi>\Orchestrations\Compensation\

  2. Eseguire Cleanup.bat.

Vedere anche

Orchestrations (cartella di esempi di BizTalk Server)