Где найти подробное представление о жизненном цикле службы Windows, разработанной в .NET? - PullRequest
4 голосов
/ 17 июля 2009

Где найти подробное представление о жизненном цикле службы Windows, разработанной в .NET? Я поставил свой вопрос таким образом, потому что я не уверен, что здесь можно выложить достаточно подробное описание, но если вы считаете, что можете, пожалуйста, попробуйте.

Примером неправильного ответа может служить вставка описания со страницы MSDN: Введение в приложения-службы Windows . Это не достаточно подробно. Например, выгружается ли служба из памяти, и для этого вызывается метод Dispose? Или же он просто останавливается методом OnStop, и его можно перезапустить без инициализации, вызвав метод OnStart?


В связи с тем, что на мой вопрос был дан ответ, и в то же время представлен еще один вопрос, здесь приведены некоторые ссылки на жизненные циклы объектов (которые, как теперь я знаю, относится и к услугам) для использования будущими посетителями этого вопроса:

StackOverflow - Что такое жизненный цикл объекта .NET?

tutorials.beginners.co.uk / чтения / идентификатор / 188

developerfusion.com / статьи / 1047 / New-объектно-возможности-в-vbnet / 3 /

Наслаждайтесь!

1 Ответ

7 голосов
/ 17 июля 2009

Служба windows по сути представляет собой приложение с несколькими дополнительными методами, предоставляемыми диспетчеру службы для управления им, а именно: Stop(), Start(), Pause(), Continue() (или эквивалентами).

Когда вызывается Start, создается домен приложения, инициализируется класс обслуживания и вызывается метод Start(). При остановке метод Stop() вызывается перед выгрузкой домена приложения из памяти.

Вы можете увидеть это с помощью диспетчера задач. Приложение не существует в памяти до тех пор, пока не будет вызван запуск, и оно исчезнет после завершения остановки.

Поэтому я считаю, что ответ на ваш вопрос жизненного цикла заключается в жизненном цикле стандартного приложения .NET, будь то командная строка, winforms или asp.net.

Я бы также советовал, что если вы зависите от метода Dispose, то, вероятно, где-то в вашей структуре лежит недостаток, при большинстве случаев ресурсы, очищаемые Dispose, должны удаляться чаще, чем когда Service Service Host вызывает ваш компонент для удаления. Большинство сервисов - это просто механизм для ответа на системное событие где-то, в тех случаях, когда это событие происходит от неуправляемого ресурса, вы, вероятно, захотите только захватить ресурс OnStart и освободить его OnStop, в ситуациях, когда событие не происходит в неуправляемом ресурсе. пространство, то вы, вероятно, захотите захватить и освободить неуправляемые ресурсы более типичным способом JustInTime, где вы можете захватить их как ресурс только тогда, когда они вам нужны, и освободить их (с помощью их метода Dispose), как только сможете. Для дальнейшего прочтения ознакомьтесь с Когда и как использовать dispose и .Net dispose pattern

...