Ошибка здесь:
if ($res[0] == 0)
$ res является объектом набора результатов. Предположительно, вы хотели использовать переменную $ row, которую вы использовали в предыдущей строке:
if ($row['aps'] == 0)
Могут Вы для изменения служебного кода во всем ? Если так, использование Консоли. SetOut для записи в файл вместо этого был бы самой очевидной первой остановкой. Затем изменение в пользовании надлежащей библиотекой входа для следующего выпуска :)
У Вас есть набор опций; перенаправление консольного вывода в файл и пользование надлежащей библиотекой входа, как упомянуто являются двумя хорошими. Вот средняя опция: запишите в журнал событий.
EventLog log;
string logsource = "MyService";
// execute once per invocation
if (!System.Diagnostics.EventLog.SourceExists(logsource))
{
System.Diagnostics.EventLog.CreateEventSource(
logsource, "Application");
}
log = new EventLog();
log.Source = logsource;
log.Log = "Application";
// replace console logging with this
log.WriteEntry(message, EventLogEntryType.Information);
Затем ищут записи в журнале событий Приложения (Средства администрирования-> Event Viewer) где Источник = "MyService".
Я не использовал бы Консоль. WriteLine вообще от Сервиса Окна. Необходимо, вероятно, зарегистрировать эти ошибки к файлу журнала.
Другой способ сделать это так, чтобы несколько приложений могли использовать журналы, добавляет сообщения журнала очереди MSMQ.
В целом необходимо постараться не писать диагностическую информацию непосредственно в Консоль, журнал событий, MSMQ или в другом месте от кода приложения. Вместо этого назовите регистрирующийся API и используйте конфигурацию для перенаправления вывода везде, где Вы хотите.
, Например, Вы могли заменить всю Консоль. WriteLine Трассировкой. WriteLine (*). Затем можно перенаправить вывод к консоли, файлу или в другом месте путем изменения файла конфигурации приложения: например, для вывода к консоли используйте ConsoleTraceListener, что-то как:
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="configConsoleListener"
type="System.Diagnostics.ConsoleTraceListener" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
При отладке, Вы получите свой вывод на консоли - на сайте для клиентов, Вы настроили бы его для перенаправления вывода трассировки в файл в журнал событий или подобный.
Еще лучше, используйте стороннюю платформу журналирования (я рекомендовал бы Log4Net), который даст Вам больше опций, чем Система. Диагностика. Трассировка.
(*) Трассировка. Писать/Прослеживать. WriteLine совпадают с Отладкой. Писать/Отлаживать. WriteLine, за исключением того, что последние только компилируются, если Отладочный символ определяется. Поэтому предпочтите, чтобы Трассировка Отладила, если Вы хотите, чтобы вывод был доступен в Сборках конечных версий.
использовать debug.writeline и использовать sysinternals debugview?
Я нашел этот пост в MSDN, который привязывает вывод консоли к форматированному текстовому полю, работал у меня очень быстро и легко.
Он переопределяет WriteLine и может быть расширенным, чтобы переопределить другие методы.