11.1.2 EH 응용 만들기

이제 EH 응응을 만듭시다.

EH 응용의 메인 폼에는 검색 질의를 입력하는 TextBox 컨트롤과 검색 요청하는 버튼 컨트롤, 결과 목록을 보여줄 RUListControl을 배치합니다. 보다 효과적으로 배치하는 것을 원하시면 도구 상자의 컨테이너 탭에 있는 컨트롤을 이용하세요. 여기에서는 컨테이너 컨트롤을 이용하는 부분은 설명에서 과감히 생략합니다.

EH 메인 폼 자식 컨트롤 배치
[그림 11.3] EH 메인 폼 자식 컨트롤 배치
번호컨트롤 이름컨트롤 유형설명
1tbox_queryTextBox질의 입력 창
2btn_searchButton바로가기 버튼
3rlc_resultRUListControl결과 항목 시각화

[표 11.2] RankedUrlControl의 자식 컨트롤

검색은 앞에서 만든 검색 서비스를 이용하는 클라이언트입니다. 검색 서비스는 .NET 리모팅 기술을 사용하므로 System.Runtime.Remoting 어셈블리를 참조 추가하세요. 또한 검색 서비스에서 서버와 클라이언트가 공통으로 사용하려고 만든 GenericSearchLib 도 참조 추가합니다. 물론 WSE_Core 라이브러리도 참조 추가해야겠죠.

검색을 위해 .NET 리모팅을 통해 GenericSearch 개체를 참조할 수 있어야 하므로 이를 참조할 멤버 필드를 선언합시다.

GenericSearch svc;

메인 폼의 Load 이벤트 핸들러를 추가합니다.

private void MainForm_Load(object sender, EventArgs e)

이벤트 핸들러에서는 검색 서비스를 이용하여 GenericSearch 개체를 참조합니다.

HttpChannel hc = new HttpChannel();
ChannelServices.RegisterChannel(hc, false);
svc = Activator.GetObject(
        typeof(GenericSearch),
        "http://[서비스 서버의 IP 주소]:10200/EHSearchSVC") as GenericSearch;
}

검색 버튼의 클릭 이벤트 핸들러를 추가합니다. 이벤트 핸들러에서는 검색하여 검색 결과를 처리합니다. 이 부분은 별도의 메서드로 작성합시다.

private void btn_search_Click(object sender, EventArgs e)
{
    Search();
}

검색을 시도하여 결과를 처리하는 Search 메서드를 작성합시다.

private void Search()

먼저 결과 목록을 지워줍니다.

rlc_result.Clear();

그리고 검색 질의를 입력 인자로 검색 요청합니다.

string query = tbox_query.Text;
ArrayList list = svc.Request(query);

검색 결과 목록의 각 결과인 순위화 한 페이지 개체를 입력 인자로 결과 항목을 추가합니다.

foreach (RankedUrl rurl in list)
{
    rlc_result.AddRankedUrl(rurl);
}

마지막으로 바로가기 버튼 클릭했을 때 이벤트 핸들러를 추가합니다.

private void rlc_result_Click(object sender, RUrlClickEventArgs e)

이벤트 핸들러에서는 검색 결과인 순위화 한 페이지 개체를 인자로 브라우저를 생성하여 보여줍니다. EHBrowser는 별도의 폼으로 작성합시다.

RankedUrl rurl = e.RUrl;
EHBrowser eb = new EHBrowser(rurl);
eb.Show();

▷ MainForm.cs

using System;
using System.Windows.Forms;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Channels;
using GenericSearchLib;
using System.Collections;
using WSE_Core;
using RankedUrlControlLib;
 
namespace EH
{
    public partial class MainForm : Form
    {
        GenericSearch svc;

        public MainForm()
        {
            InitializeComponent();
        }

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

            svc = Activator.GetObject(
                typeof(GenericSearch),
                "http:// [서비스 서버의 IP 주소]:10200/EHSearchSVC") as GenericSearch;
        }

        private void btn_search_Click(object sender, EventArgs e)
        {
            Search();
        }
 
        private void Search()
        {            
            rlc_result.Clear();
 
            string query = tbox_query.Text;
            ArrayList list = svc.Request(query);
            foreach (RankedUrl rurl in list)
            {
                rlc_result.AddRankedUrl(rurl);
            }
        }
 
        private void rlc_result_Click(object sender, RUrlClickEventArgs e)
        {
            RankedUrl rurl = e.RUrl;
            EHBrowser eb = new EHBrowser(rurl);
            eb.Show();
        }
    }
}

Windows Form 추가 메뉴를 통해 EHBrowser 폼을 추가합시다.

EHBrowser 폼에는 자식 컨트롤로 페이지 제목과 주소 및 페이지 내용을 보여주는 자식 컨트롤을 배치합니다.

EHBrowser폼 자식 컨트롤 배치
[그림 11.4] EHBrowser폼 자식 컨트롤 배치
번호컨트롤 이름컨트롤 유형설명
1lb_title_infoLabel정보 표시
2lb_titleLabel타이틀
3lb_addr_infoLabel정보 표시
4lb_addrLabel사이트 주소
5wbWebBrowser페이지 정보 표시

[표 11.3] RankedUrlControl의 자식 컨트롤

EHBrowser 컨트롤의 생성자는 순위화 한 페이지 개체를 입력 인자로 받는 것으로 변경하세요.

public EHBrowser(RankedUrl rurl)

생성자 메서드에서는 마법사에 의해 작성한 InitializeComponent 메서드 호출로 초기 자식 컨트롤 배치 등을 마친 후에 입력 인자로 받은 순위화 한 페이지 개체의 속성으로 자식 컨트롤의 Text속성을 설정합니다. 그리고 페이지 주소를 입력 인자로 WebBrowser 컨트롤인 wb의 Navigate 메서드를 호출합니다.

▷ EHBrowser.cs

using System.Windows.Forms;
using WSE_Core;
 
namespace EH
{
    public partial class EHBrowser : Form
    {
        public EHBrowser(RankedUrl rurl)
        {
            InitializeComponent();
            lb_addr.Text = rurl.Url;
            lb_title.Text = rurl.PUrl.Title;
            wb.Navigate(rurl.Url);
        }
    }
}

검색 서비스를 가동한 후에 EH 응용이 잘 동작하는지 테스트를 해 보세요.