다음을 통해 공유


경량 Client-Side 처리기

경량 클라이언트 쪽 처리기를 사용하면 모든 종류의 표준 작업을 수행하는 데 도움이 되도록 모든 크기의 일반 클라이언트 쪽 처리기를 만들 수 있습니다. 처리기는 둘 이상의 클라이언트에서 사용할 수 있습니다. 서버가 시작되기 전에 만들 수 없다는 점에서 OLE 처리기와 다르며, 수명이 프록시 관리자의 수명과 연결되어 처리기가 조기에 해제될 수 있는 경합 상태를 방지합니다.

프록시 관리자는 IMarshal 인터페이스를 구현하는 시스템에서 만든 개체입니다. 표준 마샬링을 사용하는 경우 시스템은 CoGetStandardMarshal (또는 경량 처리기를 위해 집계된 마샬러를 만들기 위한 CoGetStdMarshalEx)을 호출할 때 이를 만들고 개체에 IClientSecurityIMultiQI 인터페이스를 구현합니다. 서버 쪽에는 IMarshal도 구현하는 해당 시스템 개체가 있습니다. 이러한 개체는 마샬링을 투명하게 처리합니다.

구현할 수 있는 두 가지 일반적인 유형의 처리기가 있습니다.

  • 서버에서 추가 데이터가 필요하지 않은 서비스를 수행하는 처리기
  • 서버의 추가 데이터를 사용하는 처리기

서버에서 제공하는 스트림에서 추가 데이터를 사용할 수 있는 몇 가지 잠재적인 용도는 다음과 같습니다.

  • 서버의 정적 데이터입니다. 마샬링되는 특정 인터페이스에 관계없이 서버는 동일한 데이터를 스트림에 씁니다.
  • 서버의 인터페이스별 데이터입니다. 마샬링되는 특정 인터페이스에 따라 서버는 스트림에 다른 데이터를 쓸 수 있습니다.
  • 인터페이스별 도우미. 인터페이스별 COM 구성 요소는 클라이언트 처리기에 집계되고 표준 프록시에 위임됩니다. 예를 들어 네트워크 성능을 향상시키기 위해 IStream 용 COM 구성 요소는 클라이언트 쪽 데이터 캐싱, 미리 읽기, 쓰기 숨김, op-locking 등을 수행할 수 있습니다.
  • 인터페이스의 네트워크 버전입니다. 인터페이스의 네트워크 버전은 클라이언트 및 서버 애플리케이션 코드에서 노출하는 인터페이스와 다릅니다. 예를 들어 포함 서버 처리기가 수행하는 방식인 동일한 네트워크 인터페이스 INetAB를 통해 멀티플렉스 노출 인터페이스 IA 및 IB에 대해 가능합니다. 예를 들어 효율적인 데이터 전송을 위해 파이프를 사용하는 네트워크 인터페이스로 데이터 전송 인터페이스를 변환할 수 있습니다.

하위 수준 클라이언트에는 두 가지 이유로 사용자 지정 처리기가 있는 경계 해제 인터페이스의 기능이 없을 수 있습니다. 첫째, 서버 처리기가 집계되고 개체가 처리기를 원할 때 사용자 지정 마샬링된 패킷에 사용되는 CLSID를 이해하지 못할 수 있습니다. 둘째, 집계된 표준 마샬러를 만들고 원격 QueryInterface 호출을 수행하는 데 COM의 새로운 기능이 필요한 경우 처리기 코드가 클라이언트 쪽에서도 실행되지 않을 수 있습니다.

OLE 처리기