Dotnet Remoting 닷넷 리모팅 C#

이 글은 닷넷 리모팅 서비스를 이해하고 소켓의 기본 기능을 이해하고 있다는 전재하에
자세한 설명등은 없습니다.

----------------- Actor Mode.cs----------------------

using System;


namespace VINS.ActMode
{
 /// <summary>
 /// IRC 서버 기본 모듈
 /// </summary>
 public class ActModeClass : MarshalByRefObject
 {
  string m_strString;


  public ActModeClass()
  {
   Console.WriteLine("생성자가 호출 되었습니다");
  }


  public void AddString(string strStr)
  {
   m_strString += strStr;
   Console.WriteLine(m_strString);
  }
 }
}





-------------- Actor Host.cs --------------------------

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;


namespace CJIJ.ActHosting
{
 /// <summary>
 /// Class1에 대한 요약 설명입니다.
 /// </summary>
 class ActHostingClass
 {
  /// <summary>
  /// 해당 응용 프로그램의 주 진입점입니다.
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //Http 1220을 이용하여 채널 등록
   ChannelServices.RegisterChannel(new HttpChannel(1220));


   /*
   //######## 서버 활성화 모드 2가지 예제 #########
   //1. Singleton 모드(원격 객체가 하나만 생성되고 모든 클라이언트에선 그 원격객체를 이용하기 때문에 정보를 공유할 수 있다)
   RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.Singleton);
   //2. SingleCall 모드(클라이언트가 메셔드를 호출 할때 마다 원격 객체가 생성되고 메서드 호출과 호출 사이엔 객체의 상태가 유지 되지 않는다.)
   RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.SingleCall);
   */
   
   //######## 클라이언트 활성화 모드 #########
   RemotingConfiguration.RegisterActivatedServiceType(typeof(ActMode.ActModeClass));
   RemotingConfiguration.ApplicationName = "ActModeApp";


   //이용자의 알림 메세지
   Console.WriteLine("호스팅 어플리케이션이 시작되었습니다");
   Console.WriteLine("엔터키를 누르면 종료합니다.");


   //대기모드로 들어간다.
   Console.ReadLine();
  }
 }
}


 




-------------- Actor Client -----------------------

using System;
using CJIJ.ActMode;
using System.Runtime.Remoting; //ActHosting이 클라이언트 모드인 경우 선언해야 함


namespace ActClient
{
 /// <summary>
 /// ActClient Mode
 /// </summary>
 class ActClientClass
 {
  [STAThread]
  static void Main(string[] args)
  {
   /*
   //Acthosting 의 객체 활성화 모드가 서버 방식일때 사용
   //원격 객체의 프록시 생성
   ActModeClass obj = (ActModeClass)Activator.GetObject(typeof(CJIJ.ActMode.ActModeClass), "http://localhost:1220/ActModeUri");
   */


   //Acthosting 의 객체 활성화 모드가 클라이언트 방식일때
   RemotingConfiguration.RegisterActivatedClientType(typeof(CJIJ.ActMode.ActModeClass), "http://localhost:1220/ActModeApp");
   CJIJ.ActMode.ActModeClass obj = new CJIJ.ActMode.ActModeClass();
   //알림 메세지 표시
   Console.WriteLine("끝내려면 /quit를 입력하세요");


   while(true)
   {
    //유저로 부터 문자열을 받는다.
    string strText = Console.ReadLine();


    // "/quit" 문자열을 입력하면 프로그램을 종료시킨다.
    if(strText == "/quit")
     break;


    //원격 객체의 메서드를 호출한다.
    obj.AddString(strText);
   }
  }
 }
}