다음을 통해 공유


방법: 관리되는 Windows 서비스에서 WCF 서비스 호스팅

이 항목에서는 Windows 서비스에 의해 호스팅되는 WCF(Windows Communication Foundation) 서비스를 만드는 데 필요한 기본 단계에 대해 간략하게 설명합니다. 관리되는 Windows 서비스 호스팅 옵션을 통해 사용할 수 있는 시나리오는 메시지가 활성화되지 않은 보안 환경의 IIS(인터넷 정보 서비스) 외부에서 호스팅되는 장기 실행 WCF 서비스입니다. 서비스 수명은 대신 운영 체제에 의해 제어됩니다. 모든 버전의 Windows에서 이 호스팅 옵션을 사용할 수 있습니다.

Windows 서비스는 MMC(Microsoft Management Console)의 Microsoft.ManagementConsole.SnapIn을 통해 관리되고 시스템 부팅 시 자동으로 시작되도록 구성될 수 있습니다. 이 호스팅 옵션은 WCF 서비스를 관리되는 Windows 서비스로 호스팅하는 응용 프로그램 도메인(AppDomain) 등록으로 구성되므로 서비스의 프로세스 수명은 Windows 서비스의 SCM(서비스 제어 관리자)에 의해 제어됩니다.

서비스 코드에는 서비스 계약에 대한 서비스 구현, Windows 서비스 클래스 및 설치 관리자 클래스가 포함됩니다. 서비스 구현 클래스 CalculatorService는 WCF 서비스입니다. CalculatorWindowsService는 Windows 서비스입니다. Windows 서비스로 정규화하기 위해 클래스가 ServiceBase에서 상속되고 OnStartOnStop 메서드를 구현합니다. OnStart에서 CalculatorService 형식에 대한 ServiceHost가 만들어지고 열립니다. OnStop에서 서비스가 중지되고 삭제됩니다. 또한 호스트는 응용 프로그램 설정에서 구성된 대로 기본 주소를 서비스 호스트에 제공합니다. Installer에서 상속되는 설치 관리자 클래스를 사용하면 프로그램을 Installutil.exe 도구를 통해 Windows 서비스로 설치할 수 있습니다.

서비스 생성 및 호스팅 코드 제공

  1. Service.cs 파일에서 계산기 서비스에 대한 인터페이스를 사용하여 ICalculator 서비스 계약을 정의합니다.

  2. WCF ICalculator 인터페이스에서 서비스 계약을 상속하여 Service.cs 파일의 CalculatorService 클래스에서 서비스 계약을 WCF 서비스로 구현합니다.

  3. ServiceBase 클래스에서 Windows 서비스를 상속하여 Windows 서비스를 구현합니다. OnStart 메서드를 재정의하여 ServiceHost의 인스턴스를 만들고 엽니다. OnStop 메서드를 재정의하여 ServiceHost의 인스턴스를 닫습니다. CalculatorService의 인스턴스를 만들고 이름을 "WCFWindowsServiceSample"로 지정합니다. 응용 프로그램의 진입점을 제공합니다.

  4. Installer에서 상속되고 true로 설정된 RunInstallerAttribute로 표시되는 ProjectInstaller 클래스를 만들면 어셈블리가 설치될 때 Visual Studio의 사용자 지정 작업 설치 관리자나 InstallUtil.exe가 호출됩니다.

  5. 구성에서 서비스의 기본 주소를 제공합니다.

서비스를 설치하고 실행합니다.

  1. 서비스를 컴파일하여 Service.exe 실행 파일을 빌드합니다.

  2. 명령 프롬프트에서 installutil bin\service.exe를 입력하여 Windows 서비스를 설치합니다. 도구는 경로가 아직 설정되지 않은 경우 Microsoft.NET Framework 설치 디렉터리에 위치합니다. 명령 프롬프트에서 services.msc를 입력하여 SCM(서비스 제어 관리자)에 액세스합니다. WINDOWS 서비스는 서비스에서 "WCFWindowsServiceSample"로 표시되어야 합니다. WCF 서비스는 WINDOWS 서비스가 실행 중인 경우에만 클라이언트에 응답할 수 있습니다. 서비스를 시작하려면 SCM에서 해당 서비스를 마우스 오른쪽 단추로 클릭하고 "시작"을 선택하거나 명령 프롬프트에서 net start WCFWindowsServiceSample을 입력합니다.

  3. 서비스를 변경하려면 먼저 서비스를 중지하고 제거해야 합니다. 서비스를 중지하려면 SCM에서 해당 서비스를 마우스 오른쪽 단추로 클릭하고 "중지"를 선택하거나 명령 프롬프트에서 net stop WCFWindowsServiceSample을 입력합니다. WINDOWS 서비스를 중지한 다음 클라이언트를 실행할 경우 클라이언트가 서비스에 액세스하려고 할 때 EndpointNotFoundException 예외가 발생합니다. WINDOWS 서비스를 제거하려면 명령 프롬프트에서 installutil /u bin\service.exe를 입력합니다.

예제

다음 코드에서는 계약을 포함한 Service.cs 파일의 컨텐츠, 구현 및 WINDOWS 서비스 설치와 호스팅 코드를 보여 줍니다.

"자체 호스팅" 옵션과 같이 Windows 서비스 호스팅 환경에서는 일부 호스팅 코드를 응용 프로그램의 일부로 작성해야 합니다. 서비스는 .exe 프로그램으로 구현되고 서비스 고유의 호스팅 코드가 포함됩니다. 다른 호스팅 환경의 경우 IIS(인터넷 정보 서비스)의 WAS(Window Process Activation Service) 호스팅과 같이 개발자가 호스팅 코드를 작성할 필요가 없습니다.

참고 항목

개념

관리되는 응용 프로그램에서의 호스팅
서비스 호스팅