У меня есть служба WCF, которую я использую для содержимого конфигурации, размещенного в службе Windows, которая будет использоваться для поддержки базы данных. Есть ли способ получить доступ к службе WCF внутри службы хостинга? Или я должен переместить функциональность базы данных в другую службу WCF и разместить их как внутри службы Windows?
Класс сервиса (тот, который реализует ваш служебный интерфейс) имеет свойство
OperationContext.Current.Host
который дает вам доступ к экземпляру ServiceHost
, на котором размещается ваша служба. Вы можете легко получить доступ к этому узлу службы.
Нет встроенного способа выйти за пределы хоста службы и манипулировать или запрашивать службу NT, содержащую хост службы. Но вы всегда можете создать свой собственный класс потомков класса ServiceHost, который предоставит вам необходимый доступ к самой службе NT, а затем использовать этот настраиваемый хост службы для вашей реализации службы.
С помощью настраиваемого хоста службы вы можете в основном делать все, что считаете нужным и полезным, - просто создайте потомка из ServiceHost
и сделайте все, что вам нужно!
Если по "доступу" вы хотите спросить, можете ли вы позвонить службе, тогда да, услуга может быть самим клиентом.
Что может быть лучше для вас, чтобы разделить службу на те части, которые являются специфическими для того, что это веб-сервис и все остальные части, которые выполняют настоящую работу. Попросите службу Windows вызвать последние части.
То, как я это делаю, - передать общий объект в конструктор службы WCF с помощью специального экземпляра InstanceProvider (это позволяет использовать конструкторы, не являющиеся стандартными для службы WCF).
Затем общий объект позволяет службе WCF "разговаривать" с Сервисом Windows (или любым другим объектом, который может получить доступ к общему объекту).