서비스 응용 프로그램 프로그래밍 아키텍처
업데이트: 2007년 11월
Windows 서비스 응용 프로그램은 System.ServiceProcess.ServiceBase 클래스에서 상속되는 클래스를 기반으로 합니다. 이 클래스에서 메서드를 재정의하고 메서드의 기능을 정의하여 서비스의 동작 방식을 지정합니다.
서비스 작성과 관련된 주 클래스는 다음과 같습니다.
System.ServiceProcess.ServiceBase — 서비스를 만들 때 ServiceBase 클래스에서 메서드를 재정의하고, 코드를 정의하여 현재 상속된 클래스에서 서비스가 작동하는 방식을 지정합니다.
System.ServiceProcess.ServiceProcessInstaller 및 System.ServiceProcess.ServiceInstaller — 이들 클래스를 사용하여 서비스를 설치하고 제거합니다.
또한 ServiceController로 명명된 클래스를 사용하여 서비스 자체를 조작할 수 있습니다. 이 클래스는 서비스 작성과 관련되지 않지만 서비스를 시작 및 중지하고, 서비스에 명령을 전달하고, 일련의 열거형을 반환하는 데 사용할 수 있습니다.
서비스 동작 정의
서비스 클래스에서는 서비스의 상태가 변경될 때 서비스 제어 관리자에서 발생시킬 기본 클래스 함수를 재정의합니다. ServiceBase 클래스는 다음 메서드를 노출하며 이 메서드를 재정의하여 사용자 지정 동작을 추가할 수 있습니다.
메서드 |
재정의 |
---|---|
서비스가 실행을 시작할 때 수행할 동작을 나타냅니다. 서비스가 필요한 작업을 수행할 수 있도록 이 프로시저에 코드를 작성해야 합니다. |
|
서비스가 일시 중지되었을 때 수행할 동작을 나타냅니다. |
|
서비스의 실행이 중지되었을 때 수행할 동작을 나타냅니다. |
|
서비스가 일시 중지된 후 다시 정상 작동을 시작할 때 수행할 동작을 나타냅니다. |
|
서비스가 실행되고 있을 경우 시스템이 종료되기 직전에 수행할 동작을 나타냅니다. |
|
서비스가 사용자 지정 명령을 받았을 때 수행할 동작을 나타냅니다. 사용자 지정 명령에 대한 자세한 내용은 MSDN Online을 참조하십시오. |
|
배터리 부족이나 작업 일시 중단 등 전원 관리 이벤트가 수신될 때 서비스가 응답할 방법을 나타냅니다. |
참고: |
---|
이러한 메서드는 서비스의 수명 동안 서비스가 이동하는 상태, 즉 하나의 상태에서 다음 상태로의 서비스 전환을 나타냅니다. 예를 들어, 서비스는 OnStart가 호출되기 전에 OnContinue 명령에 응답하지 않습니다. |
이와 관련된 몇 가지 다른 속성 및 메서드에는 다음이 포함됩니다.
ServiceBase 클래스의 Run 메서드. 서비스에 대한 주 진입점입니다. Windows 서비스 템플릿을 사용하여 서비스를 만들 때 응용 프로그램의 Main 메서드에 서비스를 실행하는 코드가 삽입됩니다. 코드는 다음과 비슷합니다.
Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() _ {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)
System.ServiceProcess.ServiceBase[] ServicesToRun; ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun);
System.ServiceProcess.ServiceBase ServicesToRun[]; ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun);
참고: 위의 예제는 ServiceBase 형식 배열을 사용합니다. 이 배열에 응용 프로그램이 포함하는 각 서비스를 추가한 다음 모든 서비스를 함께 실행할 수 있습니다. 그러나 하나의 서비스만을 만드는 경우에는 배열을 사용하지 않고 ServiceBase에서 상속한 새로운 개체를 선언한 다음 이 개체를 실행하면 됩니다. 예제를 보려면 방법: 프로그래밍 방식으로 서비스 작성을 참조하십시오.
ServiceBase 클래스에 있는 일련의 속성. 이 속성은 서비스에서 호출할 수 있는 메서드를 지정합니다. 예를 들어, CanStop 속성을 true로 설정하면 서비스의 OnStop 메서드를 호출할 수 있습니다. CanPauseAndContinue 속성을 true로 설정하면 OnPause 및 OnContinue 메서드를 호출할 수 있습니다. 이러한 속성 중 하나를 true로 설정한 다음에는 관련 메서드에 대한 처리를 재정의해야 합니다.
참고:
또한 ServiceController를 호출한 구성 요소를 사용하여 기존 서비스의 동작과 통신하고 이를 제어할 수 있습니다. ServiceController 사용에 대한 자세한 내용은 Windows 서비스 모니터링을 참조하십시오.