yoursyun
.Net Remoting With IIS 본문
IIS 서버를 활용하여 .net 리모팅을 이용한 분산 응용프로그램 개발.
서버를 만들어서 작업 할 수 도 있지만, 방화벽 설정과 포트설정등 설정이 귀찮고 (서버가 이사를 간다던가... ), 서버를 만들면 서비스에 올려 놔야 맘편히 살수 있기 때문에 IIS를 이용하여 작업 하는것이 여러모로 편해 보인다.
< 서버측 작업 >
1. IIS 서버에 응용프로그램을 만든다.
2. 만들어진 응용프로그램 폴더에 web.config 파일을 넣는다.
Web.config ============================================================================= [[
<configuration>
<system.runtime.remoting>
<application>
<service>
<!-- 리모트 객체를 정의 -->
<wellknown mode="SingleCall"
type="네임스페이스.클래스명, 클래스명"
objectUri="클래스명.soap" />
</service>
</application>
</system.runtime.remoting>
</configuration>
Web.config ============================================================================= ]]
3. Remote 로 사용할 객체 dll 을 응용프로그램 폴더 안에 넣는다. (2에서 작성한 클래스)
< 클라이언트 작업 >
1. 실행될 파일의 위치에 원격지 서버 객체에 대한 정보파일을 같이 만든다.
Client.exe.config ========================================================================= [[
<configuration>
<system.runtime.remoting>
<application>
<client url="http://서버주소/응용프로그램폴더명">
<wellknown type="네임스페이스.클래스명, 클래스명"
url="http://서버주소/응용프로그램폴더명/클래스명.soap" />
</client>
<channels>
<channel ref="http" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Client.exe.config ========================================================================= ]]
2. 클라이언트 프로그램은 다음과 같이 작성하여 원격지의 응용프로그램을 사용 할 수 있다.
RemotingConfiguration.Configure("Client.exe.config");
RemoteA remObj1 = new RemoteA(); // 원격지의 object를 참조 하게 된다.
Console.WriteLine(remObj1.Greeting("Jin"));
3. Instance를 동적으로 작업하여, 메타데이타성 클래스만을 참조 하기위해 (인터페이스) 아래와 같이 호출 하는것도 한가지 방법이 될 수 있다.
/* 동적으로 object 사용하기 위한 코드 */
HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel);
RemoteA remObj1 = (RemoteA)Activator.GetObject(
typeof(RemoteA)
, "http://서버명/응용프로그램명/클래스명.soap");
Console.WriteLine(remObj1.Greeting("Jin"));