Re[7]: Как выполнить метод в другом (основном) потоке?
От: Аноним  
Дата: 13.07.09 15:03
Оценка:
Здравствуйте, SergeyT., Вы писали:

спасибо что откликнулись!

ST>Ну, тут как минимум серьезный вопрос к архитектуре...

ну эт я привел такой дурацкий пример. на самом деле у меня есть отдельная сущность "служба", которая реализует некоторый контракт (Start, Stop, etc), а дергать ее может как консольное приложение (если запущено например с параметром -console) либо сам SCM, где создаются экземпляры ServiceBase которые дергают описанную сущность.

ST>Во-вторых, когда твой класс MyService понял, что он не может больше выполнять свою работу, почему он не может попытаться восстановить свое состояние самостоятельно? И теперь уже на уровне службы прибивай этот процесс одним из следующих способов (наверняка есть еще куча других):

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

ST>ServiceController.Stop() — посылаем SCM сообщение с желанием остановки службы

тут не соглашусь, потому как WinAPI представляет интерфейс для установки состояния службы (собственно на этом строится процесс перехода от StopPending до Stopped, например). кроме того сама служба предоставляет Stop который собственно и выполняет сию работу (т.е. просто устанавливает статус Stopped) — значит предполагает остановку службы "руками".


вот и подумалось мне, что сущность-служба должна сообщить своему "хостеру", что остановилась (не работает), логичным показалось использовать hostService.Stop.

хотелось бы обсудить такую архитектуру (multi-service hosting), ничего на эту тему не нашел. более того после плотной работы (и просмотра reflector'ом) с C# реализацией (которая мне показалась очень нищей) сложилось впечатление чего-то нефункционального в полной мере
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.