2009-07-16 2 views
4

.NET에서 개발 된 Windows 서비스의 수명주기에 대한 상세보기는 어디에서 찾을 수 있습니까? 나는 상세한 설명이 여기에 게시 될 수 있는지 확신 할 수 없기 때문에 이런 식으로 질문을합니다. 그러나 당신이 생각한다면 자유롭게 시도해보십시오..NET에서 개발 된 Windows 서비스의 수명주기에 대한 상세보기는 어디에서 찾을 수 있습니까?

잘못된 대답의 예는 MSDN 페이지의 설명 붙여 넣기입니다 : Introduction to Windows Service Applications. 그것은 거의 상세하지 않습니다. 예를 들어, 서비스가 메모리에서 언로드 되었기 때문에 Dispose 메서드가 호출 되었습니까? 또는 OnStop 메서드를 사용하여 초기화하지 않고 다시 시작하기 만하면 OnStop 메서드에 의해 중단됩니까?


때문에 내 질문에 답하기, 동시에 또 다른 질문을 제시되었다는 사실에, 여기에 미래의 방문자가 사용하는 (나는 이제 서비스에 적용 알고) 라이프 사이클 '을 반대하는 일부 참조는

StackOverflow - What is the .NET object life cycle?

tutorials.beginners.co.uk/read/id/188

developerfusion.com/article/1047/new-objectoriented-capabilities-in-vbnet/3/ :이 질문에 대한

즐기십시오!

답변

7

윈도우 서비스, 즉 Stop(), Start(), Pause(), Continue() (또는 등가물)를 제어하는 ​​서비스 매니저에 대한 노출 몇 가지 추가 방법과 응용 프로그램이 유효하다.

Start를 호출하면 응용 프로그램 도메인이 만들어지고 서비스 클래스가 초기화되고 Start() 메서드가 호출됩니다. 응용 프로그램 도메인이 메모리에서 언로드되기 전에 중지시 Stop() 메서드가 호출됩니다.

작업 관리자에서 확인할 수 있습니다. 응용 프로그램은 시작이 호출 될 때까지 메모리에 존재하지 않으며 중지가 완료되면 사라집니다.

따라서 수명주기 질문에 대한 대답은 명령 줄, winforms 또는 asp.net과 같은 표준 .NET 응용 프로그램의 수명주기에 있습니다.

Dispose 메서드에 의존하는 경우 디자인 어딘가에 결함이있는 경우도 있지만 대부분의 경우 Dispose에 의해 정리 된 리소스는 서비스 호스트가 구성 요소를 Dispose로 호출합니다. 대부분의 서비스는 어딘가에 시스템 이벤트에 응답하는 메커니즘입니다.이 이벤트가 관리되지 않는 리소스에서 발생하는 경우 이벤트가 관리되지 않는 리소스에서 온 것이 아닌 상황에서 OnStart 리소스 만 가져 와서 OnStop을 해제하기 만하면됩니다. 공간을 확보하고 관리되지 않는 리소스를 잡아서 더 많은 JustInTime 유형 방식으로 배포하려는 경우 필요할 때만 자원으로 가져 와서 Dispose 메서드를 통해 가능한 한 빨리 해제 할 수 있습니다. 추가 읽기에 대해 When and how to use dispose.Net dispose pattern

+0

이것은 매우 좋은 답변입니다. 분명히하고 싶은 한 가지 점만 있습니다. 당신은 "내가 [Dispose] 방법에 의존하고 있다면 [내] 디자인에 결함이있을 수있다."라고 약간 혼돈 스럽습니다. 내 서비스를 호스팅하는 ServiceBase의 인스턴스가 Dispose를 호출하지 않습니까? 현재는 New()를 사용하여 객체를 초기화하고 OnStart를 사용하여 설정하고 '시작'을 말하고 OnStop을 사용하여 객체를 중지하고 Dispose 메서드를 호출하여 내 구성 요소, 관리 객체, 관리되지 않는 객체에 Dispose 메서드를 호출합니다. 필드를 null로 '.나는 이것이 Dispose가 사용되는 것이라는 인상 아래있었습니다. –

+0

귀하의 권리. 내 처분과 마무리가 혼란 스러웠지만, 내 의도는 여전히 맞았고, 마지막 단락을 수정했습니다. –