Share via


ICrmLogControl::RegisterCompensator メソッド (comsvcs.h)

CRM Worker は、このメソッドを使用して CRM コンペンセーターを CRM インフラストラクチャに登録します。 CRM Worker によって呼び出される最初のメソッドである必要があり、正常に呼び出すことができるのは 1 回だけです。 CRM Worker は、このメソッドの呼び出し時に "回復中" エラー コードを受け取った場合、成功するまでこのメソッドを再度呼び出す必要があります。

構文

HRESULT RegisterCompensator(
  [in] LPCWSTR lpcwstrProgIdCompensator,
  [in] LPCWSTR lpcwstrDescription,
  [in] LONG    lCrmRegFlags
);

パラメーター

[in] lpcwstrProgIdCompensator

CRM 補正器の ProgId。 文字列形式の CRM 補正器の CLSID も受け入れられます。

[in] lpcwstrDescription

監視インターフェイスで使用される説明文字列。

[in] lCrmRegFlags

CRM 補正器が受け取る必要があるトランザクション完了のフェーズと、回復が試行された後に未確定のトランザクションが残っている場合に復旧が失敗するかどうかを制御する CRMREGFLAGS 列挙からのフラグ。

戻り値

このメソッドは、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
E_POINTER
NULL ポインターが引数として指定されました。
E_UNEXPECTED
予期しないエラーが発生しました。
XACT_E_NOTRANSACTION
CRM クラークを作成するコンポーネントにはトランザクションがありません。
XACT_E_RECOVERYINPROGRESS
CRM ログ ファイルの回復はまだ進行中です。
XACT_E_RECOVERY_FAILED
未確定トランザクションが残っているため、CRM ログ ファイルの回復に失敗しました。
XACT_E_WRONGSTATE
このメソッドは間違った状態で呼び出されました。 RegisterCompensator の 前またはトランザクションの完了時 (CRM Worker)。
E_OUTOFMEMORY
メモリ不足エラーが発生しました。
E_NOINTERFACE
CRM 補正機能は、必要なインターフェイス (ICrmCompensator または ICrmCompensatorVariants) の少なくとも 1 つをサポートしていません。

注釈

lCrmRegFlags パラメーターを使用すると、実装者は、CRM 補正機能が受け取るトランザクション完了のフェーズを決定できます。 一部の CRM 補正器は準備フェーズで作業を実行しないため、準備通知を受け取る必要がない場合があります。この場合、準備フェーズが不要であることを指定することで、パフォーマンスを向上させることができます。

CRM ワーカーと CRM コンペンセーターは、"両方" スレッド コンポーネント (スレッド モデル = 任意のアパートメント) として開発することをお勧めします。 ただし、言語の制約 (たとえば、Visual Basic を使用して CRM を開発する場合) が原因で、これが不可能な場合があります。 アパートメント スレッド CRM 補正器 (スレッド モデル = シングル スレッド アパートメント) は、同期プロパティが "サポートされていません" に設定されていない限り、準備フェーズでデッドロックします。 アパートメント スレッド CRM 補正器のもう 1 つの代替手段は、準備フェーズが不要な場合はスキップすることです。

複数の分散トランザクション コーディネーター (DTC) を使用するシナリオでは、DTC トランザクションが疑わしい状態になる可能性があります。 通常、これは、トランザクション中に中断が発生し、トランザクションの発信元に連絡してトランザクションの結果を確認できないためです。 この場合、CRM インフラストラクチャはトランザクションの結果を特定できません。 CRM 実装者は、この場合に新しいトランザクションを許可するかどうかを決定できます。

"fail if-in-doubts remain" フラグは次のように使用されます。 RegisterCompensator で "fail if in-doubts remain" フラグを指定すると、回復後に未確定トランザクションが残っている場合、 RegisterCompensator の呼び出しは "回復に失敗しました" というエラー コードで失敗します。 "未確認が残っている場合は失敗します" フラグが指定されていない場合、回復は成功し、新しいトランザクションが許可され、未確定トランザクションは CRM ログ ファイルに残ります。 CRM インフラストラクチャは、次の復旧時 (アプリケーション サーバー プロセスが再起動されたとき) に、これらの未確定トランザクションの解決を再試行します。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー comsvcs.h

こちらもご覧ください

ICrmLogControl