다음을 통해 공유


컨텍스트 활성화

COM+에서 모든 COM 개체는 연결된 컨텍스트를 사용하여 만들어집니다. 즉, 새 컨텍스트를 만들고 초기화해야 하거나 적절한 기존 컨텍스트가 사용됩니다. 이 프로세스를 활성화라고 합니다. COM+에서 개체는 자체 컨텍스트 또는 해당 작성자의 컨텍스트에서 활성화됩니다(예를 들어 CoCreateInstance를 호출하여 개체 활성화를 요청한 개체).

개체 풀링과 같은 일부 상황에서는 개체가 처음부터 생성되지 않고 활성화됩니다. 이 경우 컨텍스트 내에서 실행 중인 instance 활성화됩니다. 수명 동안 여러 컨텍스트에서 반복적으로 활성화될 수 있습니다.

기본 메커니즘은 두 경우 모두 동일합니다. 개체는 컨텍스트와 연결되고 해당 컨텍스트는 개체의 런타임 요구 사항을 나타내기 위해 올바르게 초기화됩니다.

컨텍스트 속성의 흐름

다른 개체의 생성 요청에 대한 응답으로 개체가 활성화되는 경우 COM+는 다운스트림 개체를 제대로 활성화하기 위해 개체 간에 중재해야 합니다. COM+는 호출자의 컨텍스트를 호출된 구성 요소의 구성과 비교한 다음 다운스트림 구성 요소를 활성화할 위치와 컨텍스트 속성을 초기화하는 방법을 결정해야 합니다.

구성 요소의 구성을 검색하기 위해 COM+는 매우 빠른 런타임 조회에 최적화된 COM+ 클래스 등록 데이터베이스에서 검색합니다. 구성 요소를 COM+ 애플리케이션에 설치할 때 구성 요소를 구성한 방법에 따라 결정됩니다. 그런 다음, 구성 요소의 구성이 호출자의 컨텍스트 속성 상태에 대해 검사됩니다.

경우에 따라 구성은 호출자의 컨텍스트와 일치하며 호출자의 컨텍스트 내에서 구성 요소를 활성화할 수 있습니다. 이는 호출자의 컨텍스트가 새 개체의 모든 런타임 요구 사항을 충족하는 경우에만 발생할 수 있습니다.

호출자의 컨텍스트 내에서 다운스트림 구성 요소를 활성화할 수 없는 경우 적절한 아파트의 자체 컨텍스트에서 활성화됩니다. 이 경우 특정 컨텍스트 속성이 호출자에서 호출 수신자로 흐를 수 있습니다. 예를 들어 호출자가 트랜잭션과 연결되고 호출 수신자가 트랜잭션을 지원하는 경우 새 개체는 자체 컨텍스트(트랜잭션에서 투표하려면 고유한 일관된 플래그가 있어야 합니다)를 가져오고 호출자의 트랜잭션 ID와 활동 ID(동일한 트랜잭션 및 동기화 도메인 내에 있음)를 상속합니다.

무시된 컨텍스트 속성

구성 요소를 구성하는 방법에 따라 일부 컨텍스트 속성은 작성자의 컨텍스트 또는 자체 컨텍스트에서 활성화되는지 여부를 결정하는 데 아무런 역할을 하지 않을 수 있습니다. 예를 들어 트랜잭션 또는 동기화 도메인의 존재를 나타내는 트랜잭션 사용 안 함 및 동기화 사용 안 함 설정은 구성 요소의 활성화에서 아무런 역할도 수행하지 않습니다. 이러한 속성은 컨텍스트가 흐르는 경우 근본적으로 무시됩니다. 또는 구성 요소가 프로세스 수준 액세스 검사만 사용하는 경우 해당 보안 컨텍스트 속성은 무시됩니다. 구성 요소의 보안 구성은 활성화에서 역할을 하지 않습니다.

호출자의 컨텍스트에서 활성화 강제 적용

경우에 따라 개체가 호출자의 컨텍스트에서만 활성화되도록 할 수 있습니다. 즉, 자체 컨텍스트에서 활성화되지 않을 수 있습니다. 예를 들어 컨텍스트 경계에서 개체가 호출될 때 개체의 동작을 제어할 수 있습니다.

구성 요소 서비스 관리 도구를 사용하여 구성 요소 속성 페이지의 활성화 탭에서 호출자 컨텍스트에서 활성화해야 함 옵션을 선택하여 개체를 자체 컨텍스트에서 활성화할 수 없도록 할 수 있습니다. (단계별 지침은 호출자의 컨텍스트에서 활성화 적용 을 참조하세요.) 이 옵션을 선택하면 호출자의 컨텍스트에서 개체를 활성화할 수 없는 경우 CoCreateInstance 가 실패하고 CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT 반환됩니다.

기본 컨텍스트

구성되지 않은 구성 요소를 지원하기 위한 기본 컨텍스트가 있습니다. 즉, COM+ 애플리케이션에 설치되지 않고 COM+ 클래스 등록 데이터베이스에 등록되지 않은 COM 구성 요소입니다. 구성되지 않은 구성 요소에 호환되는 스레딩 모델이 있는 경우 호출자의 컨텍스트에서 활성화됩니다. 그렇지 않으면 적절한 아파트의 기본 컨텍스트에서 활성화됩니다. 각 아파트에는 COM+ 서비스를 사용하지 않는 COM 개체를 지원하는 기본 컨텍스트가 있습니다.

후킹 활성화

IObjectControl::ActivateIObjectControl::D eactivate를 구현하면 활성화 및 비활성화를 함께 후크하여 새 컨텍스트에서 특수 초기화를 수행할 수 있습니다. 이러한 메서드는 개체가 JIT 활성화 또는 개체 풀링을 사용하도록 구성된 경우 개체 수명 주기의 특정 지점에서 COM+에서 호출됩니다. 자세한 내용은 COM+ Just-In-Time 정품 인증COM+ 개체 풀링을 참조하세요.

컨텍스트 간 호출 차단