Share via


Esempio di utilizzo del servizio WorkflowCommitWorkBatch

Download sample

In questo esempio viene illustrato il modo in cui Windows Workflow Foundation consente ai servizi personalizzati di partecipare alla stessa transazione dell'istanza del flusso di lavoro in cui vengono utilizzati i servizi.

Qualsiasi attività composta il cui comportamento transazionale è associato ad essa, dispone inoltre di un batch di lavoro associato. Se le attività contenute in questa attività composta chiamano un metodo in un servizio fornito dall'host, tale servizio può anche far parte del batch di lavoro. Quando l'attività composta viene completata, viene eseguito il commit del batch di lavoro. Se per qualche ragione non è possibile eseguire il commit su un elemento, viene eseguito il rollback dell'intero batch di lavoro. Come parte del processo di commit, il contesto della transazione è fornito a tutti gli elementi nel batch. Pertanto, il servizio che chiede di partecipare alla transazione ottiene anche il contesto della transazione. Il servizio può quindi passare tale contesto di transazione a qualsiasi chiamata effettuata. Ad esempio, l'evento più comune è passare il contesto di transazione a una chiamata al database in modo che anche le chiamate al database prendano parte alla stessa transazione.

Partecipazione al batch di lavoro

Per partecipare al batch di lavoro, il servizio deve implementare un'interfaccia chiamata IPendingWork.

Registrazione con il batch di lavoro

Per partecipare al batch di lavoro, il servizio (o qualsiasi tipo che deve partecipare al batch di lavoro) deve registrarsi con il batch di lavoro. Lo scenario riportato di seguito spiega i passaggi necessari per la registrazione con il batch di lavoro.

In fase di esecuzione, un'attività chiama un metodo nel servizio. Anziché svolgere il lavoro effettivo nel metodo, il metodo viene semplicemente registrato con il batch di lavoro e il contesto richiesto per il completamento del lavoro. In un secondo momento, quando è necessario eseguire il commit del batch di lavoro, il metodo Commit viene chiamato con il contesto utilizzato al momento della registrazione. In altre parole, il metodo rinvia semplicemente l'elaborazione fino al momento adatto in cui svolgere il lavoro effettivo.

Per eseguire la registrazione con il batch di lavoro, l'elemento di lavoro viene aggiunto al batch di lavoro effettivo utilizzando quanto segue:

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

Dettagli di esempio

L'esempio è un scenario di trasferimento di denaro. Un certo importo di denaro deve essere trasferito da un conto di risparmio a un conto corrente. Il flusso di lavoro prima accredita il denaro nel conto corrente. Successivamente tenta di addebitare il denaro dal conto di risparmio. Se l'importo di denaro nel conto di risparmio è minore dell'importo da trasferire, la transazione viene interrotta e il conto corrente viene ripristinato. Se l'importo è maggiore, la transazione viene completata.

Come parte del metodo di commit, il contesto della transazione viene passato alle chiamate al database, in modo che anche il database prenda parte alla stessa transazione.

L'esempio riporta tre attività personalizzate.

CreditAmount - Utilizzata per accreditare l'importo nel conto corrente.

DebitAmount - Utilizzata per addebitare l'importo dal conto di risparmio.

TransactionComposite - Attività composta che eredita dall'attività SequenceActivity. Fornisce il comportamento della transazione.

Per creare e configurare il database SQL Server

  1. Se si utilizza Microsoft SQL Server 2005 Express, SQL Server 2000 o versioni più recenti oppure SQL Server 2000 Desktop Engine (MSDE), creare un nuovo database denominato SqlPersistenceService utilizzando l'istruzione della query SQL:

    CREATE DATABASE SqlPersistenceService

    NotaSe si utilizzano SqlTrackingService e SqlWorkflowPersistenceService in un'applicazione del flusso di lavoro, è consigliabile utilizzare un unico database per la persistenza e il rilevamento.

  2. Nell'area di lavoro SQL Query Analyzer, selezionare il database creato al passaggio 1 nell'elenco di database disponibili.

  3. Nel menu File, fare clic su Apri e aprire lo script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lingua>\SqlPersistenceService_Schema.sql, in cui <framework_version> è la versione corrente di .NET Framework installata sul computer.

  4. Eseguire la query facendo clic su Esegui o premendo F5 per creare le tabelle del servizio di persistenza SQL.

  5. Nel menu File, fare clic su Apri e aprire lo script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lingua>\SqlPersistenceService_Logic.sql, in cui <framework_version> è la versione corrente di .NET Framework installata sul computer.

  6. Eseguire la query facendo clic su Esegui o premendo F5 per creare le stored procedure del servizio di persistenza SQL.

Per generare ed eseguire l'esempio

  1. Scaricare l'esempio facendo clic su Scarica esempio.

    In tal modo viene estratto il progetto di esempio sul disco rigido locale.

  2. Creare il database TransactionServiceSampleDB eseguendo lo script per il database fornito nel file .\SQL\TransactionServiceDB.cmd.

    Nota

    Questo script crea il database denominato TransactionServiceSampleDB. La stringa di connessione utilizzata nell'esempio utilizza questo nome del database.

    Nota

    Verificare di avere aggiornato la stringa di connessione corretta nel codice sorgente se si modifica il nome del database. In caso contrario, l'esempio non sarà un grado di connettersi al database. Inoltre, prima di eseguire lo script, verificare di avere specificato il percorso corretto per l'installazione di SQL Server alla riga 20 dello script.

  3. Fare clic sul pulsante Start, scegliere Programmi, Microsoft Windows SDK e fare clic su CMD Shell.

  4. Accedere alla directory di origine dell'esempio.

  5. Al prompt dei comandi, immettere MSBUILD <nome file soluzione>.

  6. Nel prompt dei comandi di SDK, eseguire il file exe nella cartella Host\bin\debug (o nella cartella Host\bin per la versione VB dell'esempio), collocata sotto la cartella di origine dell'esempio.

  7. Per eseguire il debug dell'esempio, rendere SampleWorkflow il progetto di avvio facendo clic con il pulsante destro del mouse sul progetto in Esplora soluzione e selezionando Imposta come progetto di avvio.

  8. Aprire la finestra di dialogo Proprietà del progetto SampleWorkflow.

  9. Selezionare Avvia programma esterno e selezionare il file host.exe nella cartella Host\bin\Debug.

    Quando si esegue il file Host.exe, l'esempio prevede l'immissione da parte dell'utente dell'importo da trasferire dal conto di risparmio al conto corrente. Immettere un importo positivo diverso da zero. La transazione riesce o meno a seconda del bilancio nel conto di risparmio. Verrà mostrata la visualizzazione appropriata su schermo.

Vedere anche

Riferimenti

Commit
Add
WorkflowCommitWorkBatchService

Altre risorse

Windows Workflow CommitWorkBatch Services
Using Transactions in Workflows

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.