永続性とオーケストレーション エンジン
状態の永続化、その管理および復元は、オーケストレーション エンジンのさまざまな基本的な機能の基盤を形成します。 特に、永続化は、以下が正しく機能するために重要です。
退避と復元
マシンに依存しない実行と復元
補正モデル
制御されたシステム シャットダウン
Recovery
オーケストレーション エンジンは、さまざまな場所で実行しているオーケストレーション インスタンスの全体の状態を固定記憶装置に保存します。これにより、後でインスタンスをメモリ上に完全に復元できます。 次の状態が保存されます。
エンジン内部の状態 (現在の進行状況を含む)。
状態情報が保存され、オーケストレーションによって使用されている .NET コンポーネントの状態。
メッセージと変数値。
永続化ポイント
オーケストレーション エンジンは、さまざまな場所で実行しているオーケストレーション インスタンスの状態を保存します。 オーケストレーション インスタンスの復元、制御されたシャットダウンからの開始、または予期しないシャットダウンからの復元が必要となった場合は、最後の永続化ポイントからオーケストレーション インスタンスが実行されます。これは、障害などが発生したことを意識させずに実行されます。 たとえば、メッセージは受信されたが、状態を保存する前に予期しないシャットダウンが発生した場合、このエンジンは、メッセージの受信が完了したことを記録しないため、再起動時に再度メッセージが受信されます。 このエンジンは、次の状況でオーケストレーションの状態を保存します。
トランザクション スコープの最後に到達する。
このエンジンは、トランザクション スコープの最後に状態を保存します。これにより、オーケストレーションを再開するポイントが明確に定義され、必要に応じて補正を正しく行うことができます。
オーケストレーションは、永続化処理が成功すると、スコープの最後から実行を続けます。それ以外の場合は、適切な例外ハンドラーが呼び出されます。
スコープがトランザクションでアトミックの場合、エンジンは、コミット時にアトミックのスコープの最後の状態を保存します。
スコープがトランザクションで長時間実行されている場合、エンジンは、新しいトランザクションを生成し、スコープが完了するときに実行時のすべての状態を保存します。
デバッグのブレークポイントに到達する。
メッセージが送信される。 ただし、メッセージがアトミック トランザクション スコープ内部から送信される場合だけは、例外となります。
オーケストレーションは、オーケストレーションの開始図形と同様に、別のオーケストレーションを非同期的に 開始 します。
オーケストレーション インスタンスが中断される。
オーケストレーション エンジンがシャットダウンするように求められたら、制御情報と実行中のすべてのオーケストレーション インスタンスの現在の状態を保存して、再起動時に実行を再開できるようにします。 エンジンが現在の状態の保存に失敗した場合、シャットダウン前の最後の永続化ポイントからオーケストレーション インスタンスが再開されます。 これは、制御された条件下でのシステム シャットダウンおよび異常終了に適用されます。
インスタンスの退避が必要であるとエンジンが判断する。
オーケストレーション インスタンスが完了する。
シリアル化
直接的または (他のオブジェクトを介して) 間接的 にオーケストレーションが参照するすべてのオブジェクト インスタンスは、オーケストレーションの状態を保存するためにシリアル化に対応する必要があります。 ただし、例外が 2 つあります。
シリアル化できないオブジェクトをアトミック トランザクション内部で宣言できます。 アトミックのスコープが永続化ポイントを含まないので、この処理を実行できます。
System.Xml.XmlDocument は、シリアル化可能なクラスではありませんが、例外として扱われ、どこでも使用できます。
注意事項
.NET オブジェクトを保存するには、シリアル化可能としてマークする必要があります。
Note
COM オブジェクトは、標準の .NET シリアル化手順で保存できません。 アトミック トランザクションの外部で COM オブジェクトを呼び出す場合は、.NET シリアル化可能で、COM オブジェクトの状態を保存および復元する方法が組み込まれている .NET オブジェクトに、COM オブジェクトをラップする必要があります。
システム シャットダウン
オーケストレーション エンジンがシャットダウンするように求められたら、制御情報と実行中のすべてのオーケストレーション インスタンスの現在の状態を保存して、再起動時に実行を再開できるようにします。 エンジンが現在の状態の保存に失敗した場合、シャットダウン前の最後の永続化ポイントからオーケストレーション インスタンスが再開されます。 これは、制御された条件下でのシステム シャットダウンおよび異常終了に適用されます。
Recovery
オーケストレーション エンジンは、オーケストレーション インスタンスの状態情報を固定記憶装置に定期的に保存します。また、システムのシャットダウン時の状態も保存します。
オーケストレーション インスタンスが何らかの理由で異常終了した場合、最後に保存した状態からインスタンスを復旧できます。このため、中断がなかったかのように、インスタンスの実行を続けることができます。 これは、インスタンスを実行している元のサーバーが何らかの理由で利用できなくなった場合に有効です。その場合、インスタンスの実行を別のコンピューターで再開するだけです。 このマルチサーバーの復旧モデルを使用すると、クラスタリングが不要になります。