Condividi tramite


Creazione di servizi WorkflowCommitWorkBatchService personalizzati

Il runtime del flusso di lavoro utilizza un servizio WorkflowCommitWorkBatchService ogni volta che sorge l'esigenza di eseguire il commit dei risultati di un flusso di lavoro eseguito. È possibile fornire un servizio WorkflowCommitWorkBatchService personalizzato per controllare il modo in cui viene eseguita la logica del commit, ad esempio fornendo un contesto transazionale. Se non viene specificato alcun servizio WorkflowCommitWorkBatchService, il runtime del flusso di lavoro crea un servizio DefaultWorkflowCommitWorkBatchService quando viene avviato.

Per creare un servizio WorkflowCommitWorkBatchService personalizzato, è necessario eseguire la derivazione dalla classe base WorkflowCommitWorkBatchService. Tale classe definisce un metodo virtuale, di cui è possibile eseguire l'override:

protected void CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback)

Tale metodo viene chiamato dal runtime del flusso di lavoro in presenza di un gruppo di transazioni di cui eseguire il commit, ad esempio per rendere persistenti le modifiche all'istanza di un flusso di lavoro. L'implementazione di questo metodo deve richiamare il metodo CommitWorkBatchCallback all'interno di un ambito transazionale appropriato.

Transazioni di ambiente

L'implementazione di base verifica l'esistenza di una transazione di ambiente originata dall'istanza del flusso. Se non riscontra alcuna transazione di ambiente, ne crea una e chiama il delegato di CommitWorkBatch. Se invece una transazione di ambiente esiste, l'implementazione di base crea un elemento DependentTransaction specificando BlockCommitUntilComplete dall'enumerazione DependentCloneOption, quindi imposta l'uguaglianza tra la transazione di ambiente e l'elemento DependentTransaction appena creato. In questo modo la transazione di ambiente generata dall'istanza del flusso di lavoro potrà essere completata solo dopo il completamento del commit del batch di lavoro. Se si verifica un'eccezione, il servizio CommitWorkBatch esegue il rollback della transazione e genera nuovamente l'eccezione. È possibile utilizzare FaultHandlerActivity per intercettare questa eccezione. Ciò consente di ritentare la transazione se necessario.

L'unico tipo di transazione di ambiente supportato da WorkflowCommitWorkBatchService è una transazione che trae origine dall'istanza del flusso di lavoro. Le transazioni di ambiente che traggono origine dall'applicazione host o dall'applicazione che esegue il runtime del flusso di lavoro vengono rimosse temporaneamente dal thread corrente per ridurre gli effetti collaterali. Quando il flusso di lavoro è inattivo, la transazione di ambiente originale contenuta dall'host viene inserita di nuovo nel thread. In Windows Workflow Foundation, quindi, non è supportata la possibilità di trasferire transazioni dall'esterno in un'istanza di flusso di lavoro.

Vedere anche

Riferimenti

DefaultWorkflowCommitWorkBatchService
WorkflowCommitWorkBatchService

Concetti

Servizi WorkflowCommitWorkBatch di Windows Workflow

Altre risorse

Sviluppo dei servizi di Windows Workflow Foundation

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.