Подтвердить что ты не робот

Есть ли способ запускать процесс каждый день в веб-приложении .NET без написания служебных программ Windows или SQL-сервера

Мы требуем, чтобы в приложении ASP.Net процесс .Net должен запускаться каждый день в указанное время автоматически. Этот процесс должен взаимодействовать с базой данных (SQL Server 2005) и генерировать биллинг на ежедневной основе. Мы используем общий хостинг, поэтому мы не можем создать службу Windows или создавать задания SQL Server. Как это может быть достигнуто без вмешательства пользователя?

4b9b3361

Ответ 1

Вы можете попробовать описанную здесь технику, которая используется в StackOverflow (или, по крайней мере, она была использована здесь в какой-то момент). В двух словах:

  • При запуске добавьте элемент в HttpRuntime.Cache с фиксированным истечения срока действия.
  • Когда истекает срок действия элемента кэша, выполните свою работу, например WebRequest или вы.
  • Повторно добавьте элемент в кеш с фиксированным истечением срока.

Чтобы запустить его в определенное время вместо интервала, вы можете уменьшить интервал и просто изменить свой рабочий метод, чтобы проверить время.


Как отмечалось в примечании к предыдущей статье, это не идеальное решение, и никто не должен предпочитать его по правильной методике планирования, если он доступен. См. Когда Asp.Net удаляет истекшие элементы кэша? для получения дополнительной квалификации.

Ответ 2

Да, используйте Планировщик Windows. В зависимости от того, как он настроен, вам может потребоваться войти в систему для запуска планировщика.

Ответ 3

Вы всегда можете запланировать задачу для запуска веб-службы.

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

Ответ 4

Невозможно сделать, к сожалению.

IIS отвечает только на запросы, и SQL Server только просыпается для заданий.

Ближе всего вы сможете сделать свою рутину на странице ASPX, не связанную с сайтом, а не с очевидным именем, и запустить ее по запросу другого компьютера в Интернете.

Другой компьютер может быть Windows, Linux, Mac, все, что у вас есть, и все эти платформы имеют способы планирования событий (службы, cron и т.д.), которые могут заставить запрос инициировать обновление на сервере.

Ответ 5

Существуют способы запуска "служб" в .Net с использованием истечения срока действия кеша для запуска задачи.

Больше в CodeProject

Ответ 6

Вы можете использовать запланированную задачу, но это может также не работать в среде общего хостинга.

Вы можете настроить веб-сервис или страницу на своем веб-сайте, чтобы начать процесс, а затем запланированную задачу на настольном компьютере нажимать на эту страницу/службу один раз в день, чтобы начать процесс. Хакки, но это может сработать.

Ответ 7

Будучи .NET невежественным, я бы предположил, что для него существует какая-то платформа планировщика .NET. (Кварц для Java).

Или вы могли бы просто запустить длинный поток, который тратит большую часть времени на сон, просыпаться каждую минуту, проверять время, проверять его список "вещей, которые нужно сделать", скрыть те, которые нужно выполнить, Уровень сложности в том, насколько вы хотите его принять, но основная цель - сохранить поток "основного" потока "живым", "любой ценой".

Ответ 8

Теперь я могу подумать:

  • Создайте dll, которые содержат логику планирования, которую вы хотите, и что функция dll schedule не остановится и зациклится навсегда, то вам понадобится страница на этом сервер этой страницы запустит эту dll функции. "вам нужно будет позвонить на этой странице, по крайней мере, один раз, чтобы начать Планировщик".

  • Создайте приложение "придерживается логики расписания" на другом компьютере, может быть ваш домашний ПК, и заставить ваше приложение ПК вызывать функции на сервере через веб-службы или страницы.