Partecipanti di persistenza
Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.
Un partecipante di persistenza può far parte di un'operazione di persistenza (Save o Load) attivata da un'applicazione host. In .NET Framework versione 4 sono disponibili due classi astratte, PersistenceParticipant e PersistenceIOParticipant, che possono essere utilizzate per creare un partecipante di persistenza. Un partecipante di persistenza deriva da una di queste classi, implementa i metodi di interesse, quindi aggiunge un'istanza della classe alla raccolta WorkflowExtensions nell'oggetto WorkflowServiceHost. L'applicazione host può cercare tali estensioni del flusso di lavoro quando rende persistente un'istanza del flusso di lavoro e richiamare metodi appropriati sui partecipanti di persistenza in momenti appropriati.
Nell'elenco seguente vengono descritte le attività eseguite dal sottosistema di persistenza in fasi diverse dell'operazione Persist (Save). I partecipanti di persistenza vengono utilizzati nella terza e quarta fase. Se il partecipante è un partecipante di IO, ovvero un partecipante di persistenza che fa parte anche di operazioni di IO, viene utilizzato anche nella sesta fase.
Raccoglie i valori predefiniti, inclusi lo stato del flusso di lavoro, i segnalibri, le variabili mappate e il timestamp.
Raccoglie tutti i partecipanti di persistenza aggiunti alla raccolta di estensioni associata all'istanza del flusso di lavoro.
Richiama il metodo CollectValues implementato da tutti i partecipanti di persistenza.
Richiama il metodo MapValues implementato da tutti i partecipanti di persistenza.
Rende persistente o salva il flusso di lavoro nell'archivio di persistenza.
Richiama il metodo BeginOnSave su tutti i partecipanti di IO di persistenza. Se il partecipante non è un partecipante di IO, questa attività viene ignorata. Se l'episodio di persistenza è transazionale, la transazione viene fornita nella proprietà Transaction.Current.
Attende il completamento di tutti i partecipanti di persistenza. Se tutti i partecipanti riescono a rendere persistenti i dati dell'istanza, esegue il commit della transazione.
Un partecipante di persistenza deriva dalla classe PersistenceParticipant e può implementare i metodi CollectValues e MapValues. Un partecipante di IO di persistenza deriva dalla classe PersistenceIOParticipant e può implementare il metodo BeginOnSave oltre ai metodi CollectValues e MapValues.
Ogni fase viene completata prima dell'inizio della fase successiva. Ad esempio i valori vengono raccolti da tutti i partecipanti di persistenza nella prima fase. Quindi tutti i valori raccolti nella prima fase vengono forniti a tutti i partecipanti di persistenza nella seconda fase per il mapping. Successivamente tutti i valori raccolti e mappati nella prima e seconda fase vengono forniti al provider di persistenza nella terza fase e così via.
Nell'elenco seguente vengono descritte le attività eseguite dal sottosistema di persistenza in fasi diverse dell'operazione Load. I partecipanti di persistenza vengono utilizzati nella quarta fase. I partecipanti di IO di persistenza, ovvero i partecipanti di persistenza che fanno parte anche di operazioni di IO, vengono utilizzati anche nella terza fase.
Raccoglie tutti i partecipanti di persistenza aggiunti alla raccolta di estensioni associata all'istanza del flusso di lavoro.
Carica il flusso di lavoro dall'archivio di persistenza.
Richiama il metodo BeginOnLoad su tutti i partecipanti di IO di persistenza e attende il completamento di tutti i partecipanti di persistenza. Se l'episodio di persistenza è transazionale, la transazione viene fornita nell'oggetto Transaction.Current.
Carica l'istanza del flusso di lavoro in memoria in base ai dati recuperati dall'archivio di persistenza.
Richiama il metodo PublishValues su ogni partecipante di persistenza.
Un partecipante di persistenza deriva dalla classe PersistenceParticipant e può implementare il metodo PublishValues. Un partecipante di IO di persistenza deriva dalla classe PersistenceIOParticipant e può implementare il metodo BeginOnLoad oltre al metodo PublishValues.