WCF: что такое ServiceHost?

Поскольку в настоящее время я учусь использовать службы WCF, я постоянно сталкиваюсь с учебными пособиями в Интернете, в которых упоминается использование ServiceHost при использовании службы WCF.

Что это такое ServiceHost?


В моем текущем проекте я использую службу WCF и имею ссылку на нее из моего приложения, и всякий раз, когда я хочу использовать ее из своего приложения, я просто создаю ее ServiceClient следующим образом:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress);

А затем получить доступ к моим веб-методам (OperationContracts) из этого экземпляра (очевидно, открыв его перед использованием метода и закрыв его впоследствии с помощью Open и Close)

Моя служба WCF размещена в моем IIS, и я просто получаю доступ к .svc из своего приложения, чтобы создать экземпляр ServiceClient.

Так почему и где используется ServiceHost?


person Andreas Grech    schedule 03.05.2009    source источник


Ответы (2)


ServiceHost в основном предоставляет вам все необходимое для размещения службы WCF в параметрах, отличных от IIS или WAS. Обычно ServiceHost находится в консольном приложении или службе Windows. См. Пример кода из MSDN, чтобы узнать, как как настроить ServiceHost в консоли приложение.

person Andy White    schedule 03.05.2009
comment
Почти правильно - даже IIS и WAS будут использовать ServiceHost для размещения вашей службы WCF - они просто создают ее и автоматически срывают за вашей спиной. - person marc_s; 03.05.2009
comment
Да, я просто пытался описать, когда вы увидите ServiceHost в своем собственном коде. IIS / WAS ServiceHost обычно не используется разработчиком напрямую. - person Andy White; 03.05.2009
comment
Да, верно - ServiceHost практически не виден в сценарии IIS / WAS :) - person marc_s; 03.05.2009
comment
Мне нравится эта дерьмовая страница от MS, предоставляющая хост для сервисов wtf. Ни за что не спасибо Microsoft. Я ничего не узнал на этой странице. - person PositiveGuy; 31.10.2013
comment
Вы должны смотреть в нижнюю часть страницы MS, чтобы найти разделы «Примечания» и «Примеры», которые обеспечивают лучшее объяснение, чем просто «Предоставляет хост для служб». - person kevinpo; 06.06.2014

Реализация вашего сервиса - это просто класс .NET - для него нужна среда выполнения, чтобы его можно было как-то выполнить. Вот для чего нужен ServiceHost - он загрузит ваш класс обслуживания, настроит конечные точки, прослушиватели каналов и все такое, и, таким образом, предоставит вашему классу обслуживания «экосистему», в которой он будет жить и работать.

Вы можете создать экземпляр класса ServiceHost самостоятельно в консольном приложении, службе Windows или даже приложении Winforms и, таким образом, сделать свой класс службы WCF доступным для внешнего мира - или делегировать эту работу IIS или WAS. Даже IIS или WAS будут использовать ServiceHost для размещения вашей службы WCF - они просто делают это автоматически за кулисами и «по запросу» - всякий раз, когда поступает запрос на вашу службу WCF.

Марк

person marc_s    schedule 03.05.2009
comment
использовали бы вы это в тестах TDD, где вы хотите протестировать вызовы, такие как отправка определенных заголовков или данных в HTTP-запрос (WebOperationContext) в методы службы wcf? - person PositiveGuy; 31.10.2013