IEnlistmentNotification.InDoubt(Enlistment) メソッド


トランザクションのステータスが未決定であることを参加オブジェクトに通知します。Notifies an enlisted object that the status of a transaction is in doubt.

 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 オブジェクト。An Enlistment object used to send a response to the transaction manager.


このメソッドは、トランザクションマネージャーが1つの永続リソースに対して単一フェーズコミット操作を呼び出し、その後、トランザクション結果を取得する前に、永続リソースへの接続が失われた場合に、揮発性リソースに対して呼び出されます。This method is called for volatile resources when the transaction manager has invoked a single phase commit operation to a single durable resource, and then connection to the durable resource was lost prior to getting the transaction result. その時点では、トランザクションの結果を安全に特定できません。At that point, the transaction outcome cannot be safely determined.

InDoubt トランザクションの最終状態と見なされるため、を呼び出さないで Commit Rollback InDoubt ください。As InDoubt is considered to be a final state for a transaction, you should not call Commit or Rollback after calling InDoubt.


揮発性リソースに対してこのメソッドを実装する場合は、影響を受けるデータに対して認識されている回復またはコンテインメント操作を実行する必要があります。Your implementation of this method for the volatile resource should perform whatever recovery or containment operation it understands on the affected data. また Done 、パラメーターの処理が完了したら、でメソッドを呼び出す必要があり enlistment ます。It must also call the Done method on the on the enlistment parameter when it has finished its work.

リソースマネージャーが永続的にを参加させても、メソッドを呼び出すことによって応答しない場合 Done 、トランザクションマネージャーは、リソースマネージャーが呼び出しを受信したことを認識できません InDoubtIf the resource manager has enlisted durably, but does not respond by calling Done method, the transaction manager is unsure that the resource manager has received the InDoubt call. そのため、トランザクションマネージャーは応答を待機し続け、このトランザクションに関連する情報を保持します。As such, the transaction manager keeps waiting for a response, and maintains information relevant to this transaction. Doneが呼び出されない場合、この情報はメモリ内またはシステム全体のリソース内で無期限に保持されます。If Done is never called, this piece of information is kept around indefinitely in memory or in a system-wide resource. これにより、リソースを再利用できなくなります。This results in resources not being able to be reclaimed. 分散トランザクションの場合、msdtc ログが最終的にいっぱいになり、MSDTC プロセスが停止する可能性があります。In the case of a distributed transaction, this could eventually fill the MSDTC log which halts the MSDTC process. によって管理されるトランザクションの場合 System.Transactions 、これにより、リソースマネージャーのプロセスのメモリ消費量が徐々に増加します。In the case of a transaction managed by System.Transactions, this results in a gradual and continual increase in the memory consumption of the resource manager's process. したがって、 Done リソースマネージャーで準備作業を行った後に、メソッドを呼び出すことが重要です。Therefore, it is crucial that you call the Done method once your resource manager is done with your prepare work.