2015-03-08 10 views
2

У меня есть служба WCF в стадии разработки и часто переключаются между хостингом в службе Windows и хостингом в приложении консоли. Служба и консольное приложение используют один файл конфигурации, так как еще я могу сказать, в моем клиенте WPF, если служба размещена в консольном приложении?Как узнать, размещена ли служба WCF в приложении консоли?

+1

Служба WCF ** сама знает только об этом «ServiceHost» - но не о среде, в которой существует «ServiceHost» .... Я не думаю, что есть что-то из этого, чтобы отличить это. Зачем вам это нужно? Если вы абсолютно ** должны иметь ** эту функцию, я думаю, вам придется создать потомок «ServiceHost», который вы можете определить, работает ли он в консольном приложении или службе Windows .... –

+0

Приложение-клиент WPF делает слишком много предположений, что WCF - это служба Windows. Являясь компромиссом, находясь под девизом и отладкой, я хочу проверить тип доступа к хосту и юбке к службе Windows. Я буду пересматривать клиентское приложение довольно сильно, но мой полный приоритет - это тестирование и отладка самого WCF. Клиентское приложение имеет довольно низкий приоритет: если я могу запустить службу Windows, и WCF работает спокойно в этой службе, я могу дать моему клиенту просроченную тестовую версию на месте. Порожденный или продюсерский ресурс servicehost находится в моем списке лучших, но более долгосрочных решений. – ProfK

+0

На данный момент я проверяю, установлена ​​ли и включена ли служба Windows, а если нет, я избегаю ничего общего с ней. Затем, если мой wcf все еще запущен, это означает, что я консоль. Я чувствую себя грязным. – ProfK

ответ

2
bool windowsServiceHosted = !Environment.UserInteractive; 

Более Hacky (не должно быть необходимым выше, должны работать)

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 propetry с вашего сервера, который использует один из перечисленных выше сервер.

+0

Хороший взлом с «WindowHeight». Но не будет ли '! Environment.UserInteractive' возвращать true для других неинтерактивных хостов, таких как IIS? – ProfK

+1

Хороший вопрос! Я лично не тестировал IIS, но эта ссылка предполагает, что хост IIS вернет false для Enviroment.UserInteractive. https://social.microsoft.com/Forums/en-US/04b767d4-3e3e-47e2-abd8-7bfad2b0a749/web-development-server-code-running-in-userinteractive-mode?forum=whatforum – Ricibob

 Смежные вопросы

  • Нет связанных вопросов^_^