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

CRM 작업자는 이 메서드를 사용하여 CRM 인프라에 CRM Compensator를 등록합니다. CRM Worker에서 호출한 첫 번째 메서드여야 하며 한 번만 성공적으로 호출할 수 있습니다. CRM 작업자가 이 메서드를 호출할 때 "복구 진행 중" 오류 코드를 수신하는 경우 성공이 나타날 때까지 이 메서드를 다시 호출해야 합니다.

구문

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

매개 변수

[in] lpcwstrProgIdCompensator

CRM Compensator의 ProgId입니다. 문자열 형식의 CRM Compensator의 CLSID도 허용됩니다.

[in] lpcwstrDescription

모니터링 인터페이스에서 사용할 설명 문자열입니다.

[in] lCrmRegFlags

CRM Compensator에서 수신해야 하는 트랜잭션 완료 단계를 제어하는 CRMREGFLAGS 열거형의 플래그와 복구를 시도한 후에도 의심스러운 트랜잭션이 남아 있는 경우 복구가 실패해야 하는지 여부를 제어합니다.

반환 값

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

반환 코드 Description
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 작업자)
E_OUTOFMEMORY
메모리 부족 오류가 발생했습니다.
E_NOINTERFACE
CRM Compensator는 필요한 인터페이스(ICrmCompensator 또는 ICrmCompensatorVariants) 중 하나 이상을 지원하지 않습니다.

설명

lCrmRegFlags 매개 변수를 사용하면 구현자가 CRM Compensator가 받을 트랜잭션 완료 단계를 결정할 수 있습니다. 일부 CRM 보상자는 준비 단계에서 작업을 수행하지 않을 수 있으므로 준비 알림을 받을 필요가 없습니다. 이 경우 준비 단계가 필요하지 않음을 지정하여 성능을 향상시킬 수 있습니다.

CRM 작업자 및 CRM 보상기는 "둘 다" 스레드 구성 요소(스레딩 모델 = 모든 아파트)로 개발하는 것이 좋습니다. 그러나 언어 제약 조건(예: Visual Basic을 사용하여 CRM을 개발할 때)으로 인해 가능하지 않을 수도 있습니다. 아파트 스레드 CRM 보상기(스레딩 모델 = 단일 스레드 아파트)는 동기화 속성이 "지원되지 않음"으로 설정되지 않는 한 준비 단계에서 교착 상태가 됩니다. 아파트 스레드 CRM 보상기의 또 다른 대안은 필요하지 않은 경우 준비 단계를 건너뛰는 것입니다.

여러 DTC(분산 트랜잭션 코디네이터)가 있는 시나리오에서는 DTC 트랜잭션이 의심스러운 상태로 전환될 수 있습니다. 일반적으로 트랜잭션 중에 중단이 발생했고 트랜잭션의 시작자에게 문의하여 트랜잭션 결과를 확인할 수 없기 때문입니다. 이 경우 CRM 인프라는 트랜잭션의 결과를 확인할 수 없습니다. CRM 구현자는 이 경우 새 트랜잭션을 허용할지 여부를 결정할 수 있습니다.

"의심의 여지가 남아 있는 경우 실패" 플래그는 다음과 같이 사용됩니다. RegisterCompensator에서 "의심할 여지 없는 경우 실패" 플래그를 지정하여 복구 후에도 의심스러운 트랜잭션이 유지되면 RegisterCompensator 호출이 "복구 실패" 오류 코드와 함께 실패합니다. "의심스러운 경우 실패" 플래그를 지정하지 않으면 복구가 성공하고, 새 트랜잭션이 허용되고, 의심스러운 트랜잭션이 CRM 로그 파일에 남아 있습니다. CRM 인프라는 다음 복구(애플리케이션 서버 프로세스가 다시 시작될 때)에서 이러한 의심스러운 트랜잭션을 다시 resolve 시도합니다.

요구 사항

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

추가 정보

ICrmLogControl