オーケストレーションでの永続化
オーケストレーション エンジンは、さまざまな永続化ポイントでのオーケストレーション インスタンスの全体の状態を保存して、オーケストレーション インスタンスを復元できるようにします。 この状態には、メッセージや変数だけでなく、オーケストレーションで使用できるすべての .NET ベースのコンポーネントが含まれます。 エンジンは、次の永続化ポイントでの状態を保存します。
トランザクション スコープの最後 (アトミックまたは長時間トランザクション)
デバッグのブレークポイント
オーケストレーションの開始図形を使用した他のオーケストレーションの実行時
送信図形 (アトミック トランザクションの場合を除く)
オーケストレーション インスタンスが中断された場合
システムが適切な方法でシャットダウンした場合
退避が必要であるとエンジンが判断した場合
オーケストレーション インスタンスが完了した場合
エンジンは、特にサイズの大きいメッセージを処理するときなど、負荷がかかる場合に永続化ポイントの数を最適化します。 以下に 2 つのオーケストレーション インスタンスを示します。アトミックのスコープ内に送信図形のあるオーケストレーションでは、エンジンは、トランザクション スコープの最後とオーケストレーションの最後の間で 1 つの永続化ポイントを決定します。 別のオーケストレーションでは、2 つの永続化ポイントがあります。1 つは最初の送信図形のためのもので、もう 1 つはオーケストレーションの最後がある送信図形のためのものです。
オーケストレーションの永続化
オーケストレーションで直接的または間接的に使用するすべての .NET ベースのオブジェクトは、アトミックのスコープで呼び出されない場合に、あるいはオブジェクトがステートレスであり、静的メソッドによってのみ呼び出される場合に、シリアル化可能としてマークする必要があります。 System.Xml。XmlDocument は特殊なケースであり、スコープのトランザクション プロパティに関係なく、シリアル化可能としてマークする必要はありません。
System.Xml の特別な処理はどのように行う のか。XmlDocument の 動作:
ユーザーが T 型の変数 X を定義すると、T は System.Xml。XmlDocument またはSystem.Xml から派生したクラス。その後、XmlDocument コンパイラは X をシリアル化可能なオブジェクトとして扱います。
X をシリアル化すると、ランタイムは次の情報を保持します。(a) オブジェクト X の実際の型 Tr は、(b) ドキュメントの OuterXml 文字列を参照しています。
X を逆シリアル化すると、ランタイムは Tr のインスタンスを作成し (これはパラメーターを受け取らないコンストラクターを前提としています)、LoadXml を呼び出して、保存された OuterXml をインスタンスに提供します。次に、新しく作成された Tr インスタンスを指す X が設定されます。