yoursyun

.Net Remoting With IIS 본문

program/c#

.Net Remoting With IIS

yoursyun 2013. 2. 13. 17:12

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"));

반응형