개체를 매개 변수로 전달
COM+ 큐에 대기 중인 구성 요소 서비스는 모든 기존 COM 구성 요소에 대한 큐를 사용하도록 설정하지 않습니다. 큐에 대기할 수 있는 메서드 유형에는 제한이 있습니다. 메시징 제약 조건으로 인해 메서드는 다음 규칙을 준수해야 합니다.
- 입력 매개 변수만 포함해야 합니다.
- 애플리케이션별 결과를 반환하지 않아야 합니다.
또한 큐에 대기 중인 구성 요소에 전달할 수 있는 입력 매개 변수 유형에 대한 제한이 있습니다. 런타임에 큐에 대기 중인 구성 요소 서비스는 클라이언트에서 인수를 패키지하고 메시지 큐를 사용하여 서버 구성 요소에 전달합니다. 정수 및 부울과 같은 단순 형식은 쉽게 마샬링할 수 있습니다. 더 복잡한 형식은 도움 없이 마샬링할 수 없습니다.
대기 중인 구성 요소의 메서드 호출을 통해 개체를 매개 변수로 전달하는 경우 클라이언트는 개체를 레코더에 전달합니다. 레코더는 개체를 메시지 큐 메시지로 마샬링하고 수신기에 전달합니다. 수신기가 메시지를 선택하고 플레이어에게 전달한 후 플레이어는 개체를 다시 검증하여 클라이언트가 지정한 메서드 호출로 디스패치해야 합니다. 대기 중인 환경에서 클라이언트 및 서버의 수명에 따라 이러한 개체가 값으로 마샬링할 수 있어야 한다는 의미입니다. COM+는 표준 COM 개체에 대해 값별 전달 의미 체계를 제공하지 않으므로 레코더와 플레이어는 개체를 마샬링하고 숨기려면 구성 요소의 도움이 필요합니다.
IPersistStream을 지원하는 개체 참조를 큐에 대기 중인 구성 요소의 메서드 호출에 대한 매개 변수로 사용할 수 있습니다. 개체가 다시 만들어질 시기를 가정할 수 없습니다. 예를 들어 서버를 사용할 수 없거나 서버 구성 요소가 나중에 시작될 때까지 시작되지 않을 수 있습니다. IPersistStream을 지원하지 않는 개체는 오류를 반환합니다.
Visual Basic 지속 가능한 개체
Microsoft Visual Basic 6을 사용하면 지속 가능한 개체를 만들 수 있습니다. 이러한 개체 는 IPersistStream을 지원하며 큐에 대기된 구성 요소 메서드 호출에 매개 변수로 전달될 수 있습니다. Visual Basic 개체를 큐에 대기된 구성 요소에 전달하려면 먼저 지속 가능한 개체를 초기화해야 합니다. 이 작업은 다음 두 가지 방법 중 하나로 수행할 수 있습니다.
- 지속 가능한 개체를 만드는 애플리케이션이 Visual Basic으로 작성된 경우 Visual Basic 런타임은 개체 초기화를 자동으로 처리합니다.
- Visual Basic 지속 가능 개체를 만드는 애플리케이션이 visual Basic 이외의 언어(예: Microsoft Visual C++)로 작성된 경우 애플리케이션은 지속 가능한 개체의 IPersistStream 인터페이스를 쿼리하거나 IPersistStreamInit::InitNew 또는 IPersistStream::Load 메서드를 호출하여 구성 요소를 명시적으로 초기화해야 합니다.
ADO 레코드 집합 및 OLE DB 행 집합
구성 요소 간에 ADO Recordset 또는 OLE DB 행 집합 개체를 전달하면 한 구성 요소가 다른 구성 요소에서 실행한 쿼리의 결과를 처리할 수 있습니다. 이는 여러 컴퓨터에 애플리케이션을 배포할 때 유용합니다. Recordset 및 행 집합 개체는 다음과 같은 제한 사항으로 큐에 대기된 구성 요소에 메서드 매개 변수로 전달할 수 있습니다.
- 서버 쪽 Recordset 개체는 IPersistStream을 사용하여 마샬링할 수 없습니다. 클라이언트 쪽 Recordset 개체만 큐에 대기된 구성 요소 메서드 호출에 매개 변수로 전달할 수 있습니다.
- OLE DB로 직접 작업하는 경우 OLE DB 행 집합을 클라이언트 쪽 행 집합으로 정의해야 합니다.