Condividi tramite


Creazione di servizi di persistenza personalizzati

È possibile implementare un servizio di persistenza per salvare lo stato di runtime di un'istanza del flusso di lavoro in un archivio durevole e recuperare lo stato da tale archivio. In alcuni punti della fase di commit durante l'esecuzione di un flusso di lavoro, il motore di runtime di Windows Workflow Foundation invia notifica al servizio di persistenza di salvare le informazioni sullo stato del flusso di lavoro. Questa situazione si verifica, ad esempio, quando il flusso di lavoro diventa inattivo, quando un'attività TransactionScopeActivity termina l'esecuzione oppure quando l'applicazione host chiama il metodo Unload.

Il motore di runtime di Windows Workflow Foundation non salva in modo permanente le informazioni sullo stato in modo autonomo. Questa funzionalità viene fornita da servizi di persistenza personalizzati aggiunti al motore durante la fase di runtime. Il motore di runtime è responsabile per l'avviamento delle operazioni di persistenza e i relativi servizi personalizzati sono responsabili del salvataggio e del caricamento dei dati di stato resi persistenti.

Avviso

Se viene creato un flusso di lavoro che utilizza l'attività TransactionScopeActivity, l'attività CompensatableTransactionScopeActivity, l'attività CompensatableSequenceActivity oppure attività personalizzate che utilizzano l'attributo PersistOnCloseAttribute o implementano l'interfaccia ICompensatableActivity, è necessario specificare un servizio di persistenza da utilizzare o viene generata un'eccezione quando si esegue il flusso di lavoro.

Creazione di un servizio di persistenza personalizzato

È possibile creare un servizio di persistenza personalizzato mediante derivazione da una classe di base astratta WorkflowPersistenceService. Questa classe di base contiene cinque metodi astratti di cui è necessario eseguire l'override quando si crea il servizio di persistenza. Tali metodi sono descritti nella tabella seguente.

Metodo Descrizione

LoadCompletedContextActivity

Carica l'ambito completato specificato in memoria.

LoadWorkflowInstanceState

Carica lo stato specificato dell'istanza del flusso di lavoro in memoria.

SaveCompletedContextActivity

Salva lo stato dell'ambito completato specificato in un archivio dati.

SaveWorkflowInstanceState

Salva lo stato dell'istanza del flusso di lavoro nell'archivio dati.

UnlockWorkflowInstanceState

Sblocca lo stato di un'istanza specificata del flusso di lavoro.

UnloadOnIdle

Determina se rendere persistente in memoria l'istanza del flusso di lavoro specificata quando diventa inattivo per un certo periodo di tempo.

Per un esempio che illustra l'operazione di scarico di un flusso di lavoro da parte del motore di Windows Workflow Foundation mediante il salvataggio dello stato dell'istanza del flusso di lavoro attraverso un servizio di persistenza personalizzato, vedere Custom Persistence Service.

Blocco delle informazioni sullo stato del flusso di lavoro

Il motore di runtime di Windows Workflow Foundation è in grado di bloccare le informazioni sullo stato del flusso di lavoro per impedire il caricamento di un singolo flusso di lavoro da parte di servizi di persistenza separati in esecuzione in più processi. Tuttavia, l'effettivo meccanismo di blocco viene implementato dallo stesso servizio di persistenza personalizzato. In altre parole, il supporto è facoltativo quando si crea il servizio di persistenza. Se si preferisce supportare il blocco dello stato del flusso di lavoro, è necessario bloccare l'accesso allo stato del flusso di lavoro quando il parametro di sblocco è impostato su false al momento della chiamata a SaveWorkflowInstanceState, e quando viene chiamato LoadWorkflowInstanceState. Le informazioni sullo stato del flusso di lavoro devono rimanere in blocco fino a quando il parametro di sblocco non è impostato su true con una chiamata successiva a SaveWorkflowInstanceState o non viene chiamato il metodo UnlockWorkflowInstanceState. Se un processo tenta di caricare lo stato dell'istanza del flusso di lavoro in stato di blocco, è necessario generare un'eccezione WorkflowOwnershipException.

Persistenza delle informazioni sullo stato del flusso di lavoro utilizzando transazioni

Se il servizio di persistenza personalizzato utilizza un archivio durevole, è necessario utilizzare transazioni del flusso di lavoro in batch per posticipare la scrittura di informazioni sullo stato del flusso di lavoro fino a quando non è stato raggiunto il punto di commit del flusso di lavoro. Per eseguire questa operazione, implementare l'interfaccia IPendingWork nella classe del servizio di persistenza personalizzato e aggiungere alla proprietà WorkBatch un elemento di lavoro che rappresenta le modifiche all'archivio durevole in sospeso.

Vedere anche

Riferimenti

WorkflowPersistenceService

Concetti

Panoramica sulla persistenza
Servizi di persistenza del flusso di lavoro di Windows

Altre risorse

Custom Persistence Service
Using Persistence Services
Sviluppo dei servizi di Windows Workflow Foundation

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.