다음을 통해 공유


서비스 애플리케이션 프로그래밍 아키텍처

비고

이 문서는 .NET의 호스트된 서비스에는 적용되지 않습니다. Windows 서비스 사용 Microsoft.Extensions.Hosting.BackgroundService 및 작업자 서비스 템플릿의 최신 콘텐츠는 다음을 참조하세요.

Windows 서비스 애플리케이션은 System.ServiceProcess.ServiceBase 클래스로부터 상속받은 클래스를 기반으로 합니다. 이 클래스에서 메서드를 재정의하고 서비스의 작동 방식을 결정하는 기능을 정의합니다.

서비스 만들기와 관련된 주요 클래스는 다음과 같습니다.

또한 명명 ServiceController 된 클래스를 사용하여 서비스 자체를 조작할 수 있습니다. 이 클래스는 서비스 만들기에 포함되지 않지만 서비스를 시작 및 중지하고, 명령을 전달하고, 일련의 열거형을 반환하는 데 사용할 수 있습니다.

서비스 동작 정의

서비스 클래스에서 서비스 제어 관리자에서 서비스 상태가 변경될 때 발생하는 작업을 결정하는 기본 클래스 함수를 재정의합니다. 클래스는 ServiceBase 사용자 지정 동작을 추가하도록 재정의할 수 있는 다음 메서드를 노출합니다.

메서드 덮어쓰기
OnStart 서비스 실행을 시작할 때 수행해야 하는 작업을 나타냅니다. 서비스가 유용한 작업을 수행하려면 이 절차에서 코드를 작성해야 합니다.
OnPause 서비스가 일시 중지될 때 발생할 작업을 나타냅니다.
OnStop 서비스 실행을 중지할 때 발생할 작업을 나타냅니다.
OnContinue 일시 중지된 후 서비스가 정상 작동을 다시 시작할 때 발생하는 작업을 나타냅니다.
OnShutdown 해당 시간에 서비스가 실행 중인 경우 시스템이 종료되기 직전에 수행되어야 하는 작업을 나타냅니다.
OnCustomCommand 서비스에서 사용자 지정 명령을 받을 때 발생할 작업을 나타냅니다. 사용자 지정 명령에 대한 자세한 내용은 온라인 MSDN을 참조하세요.
OnPowerEvent 배터리 부족 또는 일시 중단 작업과 같은 전원 관리 이벤트가 수신될 때 서비스가 응답하는 방법을 나타냅니다.

비고

이러한 메서드는 서비스가 수명 동안 이동한다는 상태를 나타냅니다. 서비스는 한 상태에서 다음 상태로 전환됩니다. 예를 들어 OnContinue이 호출되기 전에는 OnStart 명령에 대해 절대 서비스가 응답하지 않을 것입니다.

관심 있는 몇 가지 다른 속성 및 메서드가 있습니다. 여기에는 다음이 포함됩니다.

  • Run 클래스의 ServiceBase 메서드입니다. 이것이 서비스의 주요 진입점입니다. Windows 서비스 템플릿을 사용하여 서비스를 만들면 애플리케이션의 Main 메서드에 코드가 삽입되어 서비스를 실행합니다. 이 코드는 다음과 같습니다.

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
        { new Service1() };
    Run(ServicesToRun);
    
    Dim ServicesToRun() As System.ServiceProcess.ServiceBase
    ServicesToRun =
        New System.ServiceProcess.ServiceBase() {New Service1()}
    System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    

    비고

    이러한 예제에서는 애플리케이션에 포함된 각 서비스를 추가할 수 있는 형식 ServiceBase의 배열을 사용한 다음 모든 서비스를 함께 실행할 수 있습니다. 그러나 단일 서비스만 만드는 경우에는 배열을 사용하지 않고 ServiceBase에서 상속된 새 개체를 선언하고 실행하도록 선택할 수 있습니다. 예를 들어 방법: 프로그래밍 방식으로 서비스 쓰기를 참조하세요.

  • 클래스의 일련의 속성입니다 ServiceBase . 이러한 요소들은 서비스에서 호출할 수 있는 메서드를 결정합니다. 예를 들어 CanStop 속성이 true로 설정된 경우, OnStop 메서드를 서비스에서 호출할 수 있습니다. 속성이 CanPauseAndContinue로 설정되면, trueOnPause 메서드를 호출할 수 있습니다. 이러한 속성 중 하나를 true로 설정하면, 연결된 메서드에 대한 처리를 재정의하고 정의해야 합니다.

    비고

    서비스는 유용하려면 최소한 OnStartOnStop를 재정의해야 합니다.

또한 ServiceController라는 구성 요소를 사용하여 기존 서비스와 통신하고 그 동작을 제어할 수 있습니다.

참고하십시오