Console.WriteLine() внутри службы Windows?
В настоящее время я использую TopShelf с консольным приложением для создания службы Windows. Когда я запускаю код в качестве консольного приложения, я использую несколько Console.WriteLine() для вывода результатов. Как только код выполняет то, что он должен делать, я устанавливаю консольное приложение в качестве службы Windows.
Есть ли недостатки с оставлением кода Console.WriteLine(), хотя служба Windows не может писать на консоль? Есть ли риск наличия неустойчивого кода, если я оставлю Console.WriteLine() там?
Ответы
Ответ 1
Выход будет просто отброшен.
В службе Windows нет консоли, поэтому вывод Console.Write * отбрасываются. Существует несколько альтернатив:
- Класс System.Diagnostics.Trace имеет аналогичный интерфейс с Класс консоли, чтобы вы могли легко перенести свой код на это.
- Затем его можно настроить для вывода в файл. Вы можете использовать System.Diagnostics.EventLog для записи в журнал событий, который затем можно отслеживать с помощью средства просмотра событий.
- Вы можете использовать сторонний библиотека с открытым исходным кодом log4net, которая очень гибкая.
Ответ 2
Нет, класс консоли будет безопасно записываться в STDOUT, но вы просто не увидите вывод.
Ответ 3
Если вы используете функцию System.Diagnostics.Trace, вы можете перенаправить вывод с помощью прослушивателей и переключателей. Если вы скомпилируете символ TRACE, тогда код будет включен. Если вы не добавите TRACE, он не будет скомпилирован в проект.
Если вы запускаете свои службы в качестве консоли для отладки, Trace будет выводиться на консоль по умолчанию. Я взял использование Trace вместо Debug или Console, так как я могу из файла конфигурации выводить информацию о трассировке в любую комбинацию файлов, экрана, базы данных и т.д.
Ответ 4
Выход всегда удалялся до Windows Server 2008R2. Оставьте консоль .writeline() в службе, установленной на этой ОС, и вы получите сообщение об ошибке 1067 при запуске/запуске службы в зависимости от положения строки().