'CAO'에 해당되는 글 1건

  1. 2007.03.29 Remoting - 활성화와 프록시 객체의 개요
posted by 써니루루 2007. 3. 29. 11:47

활성화와 프록시 객체의 개요

  • 원격 객체 활성화 방법
    • 서버 활성화 객체(SAO: Server Activated Object) - Well Known 객체라고도 함
      • SingleCall 방식
        • 함수 호출 요청이 있을 때마다 객체 생성
      • Singleton 방식
        • 클라이언트 함수 호출 요청이 있을 때 단 하나의 객체를 생성한 후 하나의 객체를 공유
    • 클라이언트 활성화 객체(CAO: Client Activated Object)
  • 서버 활성화와 클라이언트 활성화
    • 서버에 의해서 원격 객체가 자동으로 만들어지면 서버 활성화 기법이라고 한다.
    • 클라이언트에서 프록시 객체를 만들 때 원격 객체가 만들어지면 클라이언트 활성화 기법이라고 한다.
  • 클라이언트의 프록시
    • 클라이언트에서는 원격 객체를 참조하기 위한 가상의 객체를 만들게 되는데 이 객체를 프록시 객체라고 한다.
    • 이 프록시 객체를 이용해서 클라이언트는 원격 객체를 핸들할 수 있다.
  • 프록시 객체를 생성하는 방법
    • new를 사용하는 방법 : 서버 활성화, 클라이언트 활성화에서 사용
    • Activator.GetObject() 함수를 사용하는 방법 : 서버 활성화에서 사용
    • Activator.CreateInstance () 함수를 사용하는 방법 : 클라이언트 활성화에서 사용


클라이언트 활성화 객체로 프록시 객체 생성
클라이언트 활성화 객체 방식으로 프록시 객체를 생성하는 방법에는 new와 Activator.CreateInstance() 두가지 방법을 사용할 수 있다.

다음은 그 예를 보여준다.

// 1. new 키워드로 생성
RemotingConfiguration.RegisterActivatedClientType(
typeof(CaoHello.CaoHello)
, "tcp://localhost:9009/"
);

CaoHello.CaoHello h = new CaoHello.CaoHello(pars[0].ToString());

// 2. CreateInstance로 클라이언트 생성
object obj = Activator.CreateInstance(typeof(CaoHello.CaoHello), pars, attrs);
CaoHello.CaoHello h = (CaoHello.CaoHello)obj;



서버 활성화 객체로 프록시 객체 생성
- new를 사용하는 방법 : 서버 활성화
- Activator.GetObject() 함수를 사용하는 방법
- RemotingService.Connect()를 이용한 프록시 생성
            // 1. Activator.GetObject() 를 이용한 SAO
            object obj = Activator.GetObject(
                typeof(SaoHello.SaoHello)
                , "tcp://localhost:9099/BaboSaoHello"
            );
            SaoHello.SaoHello h = (SaoHello.SaoHello)obj;

            // 2. New를 이용한 SAO
            WellKnownClientTypeEntry entry = new WellKnownClientTypeEntry(
                typeof(SaoHello.SaoHello)
                , "tcp://localhost:9099/BaboSaoHello"
            );
            RemotingConfiguration.RegisterWellKnownClientType(entry);
            SaoHello.SaoHello h = new SaoHello.SaoHello();

            // 3. RemotingServices.Connect()를 이용한 SAO
            object obj = RemotingServices.Connect(
                typeof(SaoHello.SaoHello)
                , "tcp://localhost:9099/BaboSaoHello"
            );
            SaoHello.SaoHello h = (SaoHello.SaoHello)obj;