10. 2 검색 서비스 서버 만들기

검색 서비스는 윈도우 서비스로 만들게요. Windows 서비스 템플릿 유형의 프로젝트로 SearchSvc 프로젝트를 생성하세요.

설치 관리자를 추가한 후에 서비스 프로세스 인스톨러의 계정을 LocalSystem으로 변경하세요. 그리고 서비스를 시작하는 서비스 이름을 SearchSvc로 바꿉시다. 물론 마법사에 의해 제공하는 Service1.cs 파일도 SearchSvc로 변경하세요.

GenericSearchLib를 참조 추가하고 .NET 리모팅을 위해 System.Runtime.Remoting 어셈블리를 참조 추가합니다.

서비스를 시작하는 OnStart 메서드를 구현합시다. 먼저 Http 채널을 생성하고 이를 등록합니다.

HttpChannel hc = new HttpChannel(10200);
ChannelServices.RegisterChannel(hc, false);

WellKnownObject의 Single 모드로 GenericSearch 형식을 서비스할 것을 등록합니다. 접근할 명칭은 EHSearchSVC라고 할게요.

RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(GenericSearch),
                "EHSearchSVC",
                WellKnownObjectMode.Singleton
                );

리플렉션을 이용해 서비스를 하는 것이므로 RankerLib 출력 폴더에 있는 파일들을 프로젝트 출력 폴더(일반적으로 Bin 혹은 Debug)에 붙여 놓습니다.

그리고 관리자 권한으로 명령 프롬프트에서 “installutil SearchSvc”를 입력하여 서비스 등록하세요.

▷ GenericSearch.cs

using System.ServiceProcess;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting;
using GenericSearchLib; 
namespace SearchSvc
{
    public partial class SearchSvc : ServiceBase
    {
        public SearchSvc()
        {
            InitializeComponent();
        } 
        protected override void OnStart(string[] args)
        {
            HttpChannel hc = new HttpChannel(10200);
            ChannelServices.RegisterChannel(hc, false);
            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(GenericSearch),
                "EHSearchSVC",
                WellKnownObjectMode.Singleton
                );
        } 
        protected override void OnStop()
        {
        }
    }
}