У меня есть служба WCF в стадии разработки, и я часто переключаюсь между размещением в службе Windows и размещением в консольном приложении. Служба и консольное приложение совместно используют один файл конфигурации, так как еще я могу определить в моем клиенте WPF, размещена ли служба в консольном приложении?
Как определить, размещена ли служба WCF в консольном приложении?
Ответы (1)
bool windowsServiceHosted = !Environment.UserInteractive;
Более хакерский (не обязательно выше, должно работать)
private bool? _ConsolePresent;
public bool ConsolePresent {
get {
if (_ConsolePresent == null) {
_ConsolePresent = true;
try { int window_height = Console.WindowHeight; }
catch { _ConsolePresent = false; }
}
return _ConsolePresent.Value;
}
}
bool windowsServiceHosted = !ConsolePresent;
Если вам нужно узнать от клиента, вам нужно будет предоставить свойство bool WindowServicesHosted
с вашего сервера, которое использует одну из указанных выше серверных сторон.
person
Ricibob
schedule
09.03.2015
Хороший хак с
WindowHeight
. Но разве !Environment.UserInteractive
не вернет true для других неинтерактивных хостов, таких как IIS?
- person ProfK; 09.03.2015
Хороший вопрос! Я лично не тестировал IIS, но эта ссылка предполагает, что хостинг IIS вернет false для Enviroment.UserInteractive. social.microsoft.com/Forums/en-US/
- person Ricibob; 09.03.2015
ServiceHost
, но не о среде, в которой существуетServiceHost
... Я не думаю, что есть что-то нестандартное, чтобы различать это. А зачем тебе это вообще?? Если вы абсолютно должны иметь эту функцию, я думаю, вам придется создать потомкаServiceHost
, по которому вы сможете определить, работает ли он в консольном приложении или службе Windows.... - person marc_s   schedule 08.03.2015