次の方法で共有


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

CRM Worker と CRM 補正機能は、このメソッドを使用して、非構造化ログ レコードをログに書き込みます。 このメソッドは、通常、C++ で記述された CRM コンポーネントによって使用されます。 レコードはログに遅延して書き込まれ、永続的になる前に強制的に行う必要があります。 ( 「ICrmLogControl::ForceLog」を参照してください)。

構文

HRESULT WriteLogRecord(
  [in] BLOB [] rgBlob,
  [in] ULONG   cBlob
);

パラメーター

[in] rgBlob

ログ レコードを形成する BLOB の配列。 BLOB は、任意の量のバイナリ データを格納するために使用される Windows データ型です。

[in] cBlob

配列内の BLOB の数。

戻り値

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

リターン コード 説明
S_OK
メソッドは正常に完了しました。
E_INVALIDARG
BLOB の数は 0 です。
E_POINTER
NULL ポインターが引数として指定されました。
XACT_E_WRONGSTATE
このメソッドは間違った状態で呼び出されました。 RegisterCompensator の 前またはトランザクションの完了時 (CRM Worker)。
XACT_E_ABORTED
トランザクションが中止されました。多くの場合、トランザクションのタイムアウトが原因です。

解説

非構造化レコードは、単にバイトのバッファーです。 メソッドは、データへのポインターとバイト数を含む構造体である BLOB の配列から特定の CRM ログ レコードのセクションを構築できるようにすることで、収集機能を実装します。 これにより、データのコピーが減り、CRM メモリ領域からログ マネージャーのバッファーに直接コピーが 1 つだけになります。

非構造化ログ レコードと構造化ログ レコードを混在させることはできません。 WriteLogRecord または WriteLogRecordVariants は呼び出すことができますが、同じ CRM Worker または CRM 補正子の両方で呼び出すわけではありません。

BLOB に含まれるデータ構造内のポインター型をログ レコードに含めてはいけません。 CRM 補正機能は、ログ レコードを書き込んだ CRM Worker とは異なるプロセスで実行されるため、復旧フェーズ中にオブジェクト参照が有効ではなくなりました。 BLOB 内のポインター型をログ レコードに含めると、アプリケーションがクラッシュしたり、回復中にそれ自体が破損したりする可能性があります。

要件

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

関連項目

ICrmLogControl