Вам не нужно размещать его в отдельном домене, но вы должны решить, хотите ли вы, чтобы запрос на обслуживание обрабатывался потоком пользовательского интерфейса или другим потоком.Это зависит от того, как вы создаете ServiceHost
экземпляр или от ServiceBehavior
, применяемого к вашему классу обслуживания.
Когда служба размещается в потоке пользовательского интерфейса, она может напрямую взаимодействовать с пользовательским интерфейсом, но обработка запроса является частью цикла сообщенийвсе запросы на обслуживание обрабатываются одним потоком (последовательно).Когда запрос обрабатывается, никакое другое событие Windows (включая события пользовательского интерфейса) не может быть обработано = приложение зависает.
Когда служба размещается в другом потоке, она ведет себя как в любой другой среде размещения, но не может напрямую взаимодействовать с пользовательским интерфейсом.- Вы должны использовать вызов делегата.
Способы принудительного запуска службы в собственных потоках:
- Создание и открытие
ServiceHost
экземпляра перед вызовом Application.Run
(начало сообщения Windowsцикл) - Создание и открытие
ServiceHost
экземпляра в отдельном потоке - Использование
[ServiceBehavior(UseSynchronizationContext = false)]
в реализации вашей службы