다음을 통해 공유


Windows 서비스 애플리케이션에서의 호스팅

Windows 서비스(이전의 Windows NT 서비스)에서는 장기 실행되는 실행 파일에 있어야 하는 애플리케이션에 특히 적합한 프로세스 모델을 제공하지만 사용자 인터페이스 폼을 표시하지 않습니다. Windows 서비스 애플리케이션의 프로세스 수명은 Windows 서비스 애플리케이션을 시작, 중지 및 일지 중지할 수 있도록 해 주는 SCM(서비스 제어 관리자)이 관리합니다. 컴퓨터를 시작할 때 Windows 서비스 프로세스가 자동으로 시작되도록 구성하여 "항상 연결되어 있는" 애플리케이션에 적합한 호스팅 환경을 만들 수 있습니다. Windows 서비스 애플리케이션에 대한 자세한 내용은 Windows 서비스 애플리케이션을 참조하세요.

장기 실행 WCF(Windows Communication Foundation) 서비스를 호스트하는 애플리케이션은 Windows 서비스와 많은 특성을 공유합니다. 특히 WCF 서비스는 사용자와 직접 상호 작용하지 않는 장기 실행 서버 실행 파일이므로 사용자 인터페이스의 폼을 구현하지 않습니다. 따라서 Windows 서비스 내에서 WCF 서비스를 호스트하는 것은 강력한 장기 실행 WCF 애플리케이션을 빌드하기 위한 옵션 중 하나입니다.

WCF 개발자는 WCF 애플리케이션을 Windows 서비스 애플리케이션 내에서 호스트할지, IIS(인터넷 정보 서비스) 또는 WAS(Windows Process Activation Service) 호스팅 환경 내에서 호스트할지 결정해야 하는 경우가 있습니다. 다음과 같은 경우에는 Windows 서비스 애플리케이션을 사용하는 것을 고려해야 합니다.

  • 애플리케이션에서 명시적 활성화가 필요한 경우. 예를 들어, 서버가 들어오는 첫 번째 메시지에 대한 응답으로 동적으로 시작되는 대신 시작될 때 애플리케이션이 자동으로 시작되어야 하는 경우 Windows 서비스를 사용해야 합니다.

  • 애플리케이션을 호스트하는 프로세스가 일단 시작되면 계속 실행되어야 하는 경우. Windows 서비스 프로세스는 일단 시작되면 서버 관리자가 서비스 제어 관리자를 사용하여 명시적으로 종료하지 않는 한 계속 실행됩니다. IIS 또는 WAS에서 호스트되는 애플리케이션은 시스템 리소스의 사용을 최적화하기 위해 동적으로 시작되거나 중지될 수 있습니다. 호스팅 프로세스의 수명을 명시적으로 제어할 필요가 있는 애플리케이션은 IIS 또는 WAS 대신 Windows 서비스를 사용해야 합니다.

  • WCF 서비스는 Windows Server 2003에서 실행되어야 하며 HTTP 이외의 전송을 사용해야 합니다. Windows Server 2003에서 IIS 6.0 호스팅 환경은 HTTP 통신으로만 제한됩니다. Windows 서비스 애플리케이션의 경우 이 제한이 적용되지 않으며 net.tcp, net.pipe 및 net.msmq를 포함하여 WCF에서 지원하는 모든 전송을 사용할 수 있습니다.

방법

  1. Windows 서비스 애플리케이션을 만듭니다. System.ServiceProcess 네임스페이스에 있는 클래스를 사용하여 관리 코드에서 Windows 서비스 애플리케이션을 작성할 수 있습니다. 이 애플리케이션에는 ServiceBase에서 상속된 하나의 클래스가 있어야 합니다.

  2. WCF 서비스의 수명을 Windows 서비스 애플리케이션의 수명에 연결합니다. 일반적으로 Windows 서비스 애플리케이션에서 호스트되는 WCF 서비스에서 호스팅 서비스가 시작될 때는 활성화하고, 호스팅 서비스가 중지될 때는 메시지의 수신 대기를 중지하고, WCF 서비스에 오류가 발생할 때는 호스팅 프로세스를 종료할 수 있습니다. 이렇게 하려면 다음을 수행합니다.

    • OnStart(String[])를 재정의하여 ServiceHost의 인스턴스를 하나 이상 엽니다. 하나의 Windows 서비스 애플리케이션이 그룹으로서 시작 및 중지되는 여러 WCF 서비스를 호스트할 수 있습니다.

    • OnStop을 재정의하여 OnStart(String[]) 중에 시작된 실행 중인 WCF 서비스의 ServiceHost에서 Closed를 호출합니다.

    • FaultedServiceHost 이벤트를 구독하고 ServiceController 클래스를 사용하여 오류가 발생한 경우 Windows 서비스 애플리케이션을 종료합니다.

    WCF 서비스를 호스트하는 Windows 서비스 애플리케이션이 배포되고 WCF를 사용하지 않는 Windows 서비스 애플리케이션과 동일한 방식으로 관리됩니다.

참고 항목