1.7.3 클라이언트 제작

.NET 리모팅 서비스를 사용하는 클라이언트를 만듭시다. 클라이언트는 Windows Forms 형태의 응용 프로그램을 작성합시다.

[그림 1.27] 클라이언트 메인 폼 컨트롤 배치
클라이언트 메인 폼 자식 컨트롤
[표 1.5] 클라이언트 메인 폼 자식 컨트롤

 .NET 리모팅 서비스를 사용하는 클라이언트도 System.Runtime.Remoting 어셈블리와 공용 라이브러리인 NumToEngLib 어셈블리를 참조 추가해야 합니다.

메인 폼의 Load 이벤트 핸들러를 추가하여 채널 생성 및 등록합니다.

private void MainForm_Load(object sender, EventArgs e)
{
    HttpChannel hc = new HttpChannel();
    ChannelServices.RegisterChannel(hc, false);
}

변환 버튼의 Click 이벤트 핸들러를 추가합니다.

private void btn_convert_Click(object sender, EventArgs e)

이벤트 핸들러에서는 원격 서버로부터 원격 개체를 참조합니다. 이 때 Activator 클래스의 정적 메서드 GetObject를 이용합니다. 클라이언트 측에서 참조한 개체는 실제 개체가 아닌 원격 개체의 Proxy 개체입니다.

NumToEng nte = Activator.GetObject(
        typeof(NumToEng),
        "http://[서버 IP]:16000/MySvc")
        as NumToEng;

그리고 원격 개체를 참조한 nte의 Convert 메서드를 호출하여 결과를 레이블의 Text 속성을 지정합니다.

lb_digit.Text = nte.Convert((int)nud.Value);

이제 빌드한 후에 서버를 실행하고 클라이언트를 실행하여 테스트 하면 다음과 같이 동작함을 알 수 있습니다.

시연 화면
[그림 1.28] 시연 화면

시연 화면을 보면 알 수 있듯이 서버 측의 원격 개체의 Convert 메서드가 동작함을 알 수 있습니다.

▶ MainForm.cs

using System;
using System.Windows.Forms;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Channels;
using NumToEngLib;
 
namespace 클라이언트_예광탄
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        private void btn_convert_Click(object sender, EventArgs e)
        {
            NumToEng nte = Activator.GetObject(
                typeof(NumToEng),
                "http:// [서버 IP]:16000/MySvc")
                as NumToEng;
            lb_digit.Text = nte.Convert((int)nud.Value);
        } 
        private void MainForm_Load(object sender, EventArgs e)
        {
            HttpChannel hc = new HttpChannel();
            ChannelServices.RegisterChannel(hc, false);
        }
    }
}