Persistenza nelle orchestrazioni
Il motore di orchestrazione salva l'intero stato di un'istanza di orchestrazione in diversi punti di persistenza, per consentire la reidratazione dell'istanza di orchestrazione. Lo stato include tutti i componenti basati su .NET eventualmente utilizzati nell'orchestrazione, oltre a messaggi e variabili. Il motore archivia lo stato nei punti di persistenza seguenti:
Alla fine di un ambito di transazione (esecuzione atomica o prolungata)
Nei punti di interruzione di debug
Nel punto di esecuzione di altre orchestrazioni mediante la forma Avvia orchestrazione
All'altezza della forma Trasmissione (tranne nelle transazioni atomiche)
Quando viene sospesa un'istanza di orchestrazione
Quando si verifica un arresto del sistema in modo controllato
Quando il motore determina che deve essere eseguita la disidradatazione
Quando viene completata un'istanza di orchestrazione
Il motore ottimizza il numero di punti di persistenza poiché si tratta di elementi costosi, specialmente quando si gestiscono messaggi di grandi dimensioni. Come illustrato nelle due istanze di orchestrazione seguenti, nell'orchestrazione con le forme Trasmissione in un ambito atomico, il motore determina un singolo punto di persistenza tra la fine dell'ambito di transazione e la fine dell'orchestrazione. Nell'altra orchestrazione saranno presenti due punti di persistenza, uno per la prima forma Trasmissione e l'altro per la forma Trasmissione più la fine dell'orchestrazione.
Persistenza delle orchestrazioni
Tutti gli oggetti basati su .NET utilizzati nelle orchestrazioni, in modo diretto o indiretto, devono essere contrassegnati come serializzabili, a meno che non vengano chiamati in ambiti atomici o non siano oggetti senza informazioni sullo stato chiamati solo tramite metodi statici. System.Xml. XmlDocument è un caso speciale e non deve essere contrassegnato come serializzabile indipendentemente dalla proprietà di transazione per un ambito.
Come viene gestita la gestione speciale per System.Xml. Lavoro xmlDocument :
Quando l'utente definisce una variabile X di tipo T, dove T è System.Xml. XmlDocument o una classe derivata da System.Xml. XmlDocument considera quindi X come oggetto serializzabile.
Quando si serializza X, il runtime mantiene le informazioni seguenti: (a) il tipo effettivo Tr dell'oggetto X fa riferimento alla stringa OuterXml del documento.
Quando si de-serializza X, il runtime creerà un'istanza di Tr (si presuppone un costruttore che non accetta parametri) e chiamerà LoadXml fornendo l'istanza con l'oggetto OuterXml salvato. X verrà quindi impostato per puntare all'istanza appena creata di Tr.