IEnlistmentNotification.InDoubt(Enlistment) メソッド

定義

参加しているオブジェクトに、トランザクションの状態が不明であることを通知します。

public:
 void InDoubt(System::Transactions::Enlistment ^ enlistment);
public void InDoubt(System.Transactions.Enlistment enlistment);
abstract member InDoubt : System.Transactions.Enlistment -> unit
Public Sub InDoubt (enlistment As Enlistment)

パラメーター

enlistment
Enlistment

トランザクション マネージャーに応答を送信するために使用する Enlistment オブジェクト。

注釈

このメソッドは、トランザクション マネージャーが単一の永続リソースに対して単一フェーズコミット操作を呼び出した後、トランザクションの結果を取得する前に永続リソースへの接続が失われた場合に、揮発性リソースに対して呼び出されます。 その時点で、トランザクションの結果を安全に判断することはできません。

InDoubtはトランザクションの最終状態と見なされるため、Commitを呼び出したり、Rollbackを呼び出した後にInDoubtしたりしないでください。

Note

揮発性リソースに対するこのメソッドの実装では、影響を受けるデータに対して認識される任意の回復操作または包含操作を実行する必要があります。 また、作業が完了したら、Done パラメーターで enlistment メソッドを呼び出す必要があります。

リソース マネージャーが永続的に参加しているが、 Done メソッドを呼び出しても応答しない場合、トランザクション マネージャーはリソース マネージャーが InDoubt 呼び出しを受け取ったかどうかわからない。 そのため、トランザクション マネージャーは応答を待機し続け、このトランザクションに関連する情報を保持します。 Doneが呼び出されない場合、この情報はメモリまたはシステム全体のリソースに無期限に保持されます。 これにより、リソースを再利用できなくなります。 分散トランザクションの場合、最終的に MSDTC ログがいっぱいになり、MSDTC プロセスが停止する可能性があります。 System.Transactionsによって管理されるトランザクションの場合、リソース マネージャーのプロセスのメモリ消費量が段階的かつ継続的に増加します。 そのため、リソース マネージャーが準備作業を完了したら、 Done メソッドを呼び出す必要があります。

適用対象