Мы используем Log4Net на работе как регистрирующийся поставщик с одноэлементной оберткой для экземпляра журнала (хотя одиночный элемент рассматривается, подвергая сомнению, являются ли они хорошей идеей или не).
Мы выбрали его по следующим причинам:
, я должен упомянуть, это говорит с точки зрения разработки ASP.NET
, я вижу некоторые достоинства в использовании Трассировки, которая находится в платформе.NET, но я не полностью продаюсь на нем, главным образом потому что компоненты, с которыми я работаю, действительно не делают никаких вызовов Трассировки. Единственная вещь, которую я часто использую, который делает, System.Net.Mail
от того, что я могу сказать.
, Таким образом, у нас есть библиотека, которая переносит log4net и в рамках нашего кода, который мы просто должны наполнить как это:
Logger.Instance.Warn("Something to warn about");
Logger.Instance.Fatal("Something went bad!", new Exception());
try {
var i = int.Parse("Hello World");
} catch(FormatException, ex) {
Logger.Instance.Error(ex);
}
В рамках методов мы делаем проверку, чтобы видеть, включен ли регистрирующийся уровень, таким образом, у Вас нет избыточных вызовов к log4net API (поэтому, если Отладка не включена, операторы отладки проигнорированы), но когда я получу некоторое время, я буду обновлять его для представления их так, чтобы можно было сделать проверки сами. Это предотвратит оценки, предпринимаемые, когда они не были должны, например:
Logger.Instance.Debug(string.Format("Something to debug at {0}", DateTime.Now);
Это станет:
if(Logger.DebugEnabled) Logger.Instance.Debug(string.Format("Something to debug at {0}", DateTime.Now);
(Экономят немного времени выполнения)
По умолчанию мы регистрируемся в двух местах:
Файлы сделаны как прокрутка каждого дня или 10 МБ (IIRC). Мы не используем EventLog, поскольку он может потребовать повышения уровня защиты, чем мы часто хотим дать сайт.
я нахожу, что Блокнот работает просто великолепно для чтения журналов.
Вы можете попробовать метод, описанный здесь , используемый в самом StackOverflow (или, по крайней мере, он использовался здесь когда-то). Вкратце:
- При запуске добавьте элемент в HttpRuntime.Cache с фиксированным истечение срока.
- По истечении срока действия элемента кеша выполните свою работу, например WebRequest или что-нибудь вы.
- Повторно добавьте элемент в кеш с фиксированным сроком действия.
Чтобы заставить его запускаться в определенное время вместо интервала, вы можете уменьшить интервал и просто изменить свой метод работы, чтобы проверить время
Как отмечается в комментариях к исходной статье, приведенной выше, это не идеальное решение, и никто не должен предпочесть его правильному методу планирования, если он доступен. См. Когда Asp.Net удаляет просроченные элементы кэша? для некоторых дополнительных требований.
К сожалению, это невозможно.
IIS отвечает только на запросы, а SQL Server просыпается только для выполнения заданий.
Ближайшее, что вы сможете сделать, это выполнить поместите свою процедуру на страницу ASPX, не связанную с сайтом и не имеющую очевидного имени, и активируйте ее по запросу с какой-либо другой машины в Интернете.
Другой машиной может быть Windows, Linux, Mac, все, что у вас есть, и на всех этих платформах есть способы планирования событий (службы, cron и т. д.), которые могут сделать запрос на запуск обновления на сервере.
Да, использовать планировщик Windows. В зависимости от того, как он настроен, вам может потребоваться войти в систему для запуска планировщика.
Вы можете использовать запланированную задачу, но это может не работать и в среде общего хостинга.
Вы можете настроить веб-службу или страницу на своем веб-сайте, чтобы запустить процесс, а затем получить запланированная задача на настольном компьютере запускает эту страницу / службу один раз в день, чтобы запустить процесс. Хакерский, но может сработать.
Вы всегда можете запланировать задачу для запуска веб-службы ..
http://weblogs.asp.net/jgalloway/archive/2005/10/24/428303.aspx
Планировщик запускал бы файл VBS со следующими параметрами ..
Set oServerXML = CreateObject("Msxml2.ServerXMLHTTP")
oServerXML.Open "GET","http://my.hostedservice.com/myService.asmx/myService?aParam=Value
oServerXML.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
oServerXML.Send
Set oServerXML = nothing
Поскольку .NET не осведомлен, я мог бы предположить, что для этого существует какая-то платформа планировщика на основе .NET (очень похожая на Quartz для Java).
Или вы можете просто запустить долгую работу поток, который большую часть времени проводит в спящем режиме, просыпается каждую минуту, проверяет время, проверяет свой список «дел, которые нужно сделать», запускает те, которые необходимо сделать. Уровень сложности настолько велик, насколько вы хотите, но основная цель - поддерживать основной поток планирования «живой», «любой ценой».
Есть способы запускать «службы» в .Net, используя истечение срока действия кеша для запуска задачи.
Теперь я могу думать о следующем:
Создайте dll, содержащую запланировать логику, которую вы хотите, и сделать убедитесь, что эта функция расписания dll не остановится и будет зацикливаться вечно, тогда вам понадобится страница об этом сервер эта страница запустит эту dll функции. "вам нужно будет позвонить эту страницу хотя бы один раз, чтобы запустить scheduler ".
Создайте приложение," хранящее логику расписания "на другом компьютере, может быть на вашем домашнем ПК, и заставьте приложение вашего ПК вызывать функции на сервере через веб-службы или страницы