ICrmLogControl::WriteLogRecord 메서드(comsvcs.h)

CRM 작업자 및 CRM Compensator는 이 메서드를 사용하여 비정형 로그 레코드를 로그에 씁니다. 이 메서드는 일반적으로 C++로 작성된 CRM 구성 요소에서 사용됩니다. 레코드는 로그에 게으름으로 기록되며 지속성이 되기 전에 강제로 기록되어야 합니다. ( ICrmLogControl::ForceLog를 참조하세요.)

구문

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

매개 변수

[in] rgBlob

로그 레코드를 구성하는 BLOB 배열입니다. BLOB은 임의의 양의 이진 데이터를 저장하는 데 사용되는 Windows 데이터 형식입니다.

[in] cBlob

배열의 BLOB 수입니다.

반환 값

이 메서드는 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
메서드가 완료되었습니다.
E_INVALIDARG
BLOB 수의 개수는 0입니다.
E_POINTER
NULL 포인터가 인수로 제공되었습니다.
XACT_E_WRONGSTATE
이 메서드가 잘못된 상태로 호출되었습니다. RegisterCompensator 이전 또는 트랜잭션이 완료되는 경우(CRM 작업자)
XACT_E_ABORTED
트랜잭션 제한 시간으로 인해 트랜잭션이 중단되었습니다.

설명

구조화되지 않은 레코드는 단순히 바이트 버퍼입니다. 메서드는 특정 CRM 로그 레코드의 섹션을 BLOB 배열에서 빌드할 수 있도록 하여 수집 기능을 구현합니다. 이는 데이터에 대한 포인터와 바이트 수를 포함하는 구조체입니다. 이렇게 하면 데이터 복사가 줄어들어 CRM 메모리 공간에서 로그 관리자의 버퍼로 직접 복사되는 복사본이 하나만 발생합니다.

구조화되지 않은 로그 레코드와 구조화된 로그 레코드는 혼합할 수 없습니다. WriteLogRecord 또는 WriteLogRecordVariants 를 호출할 수 있지만 동일한 CRM 작업자 또는 CRM Compensator에서 둘 다 호출할 수는 없습니다.

로그 레코드의 BLOB에 포함된 데이터 구조 내에 포인터 형식을 포함해서는 안 됩니다. CRM Compensator가 로그 레코드를 작성한 CRM 작업자의 프로세스와 다른 프로세스에서 실행되므로 복구 단계에서 개체 참조가 더 이상 유효하지 않습니다. 로그 레코드에 BLOB 내에 포인터 형식을 포함하면 복구 중에 애플리케이션이 충돌하거나 손상될 수 있습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 comsvcs.h

추가 정보

ICrmLogControl