Нужен планировщик заданий в asp.net - PullRequest
6 голосов
/ 23 апреля 2009

У нас есть веб-сайт, на котором нам нужен планировщик для получения уведомлений (по электронной почте) в определенное время. например. человек, назначивший напоминание в 17:00 для участия в собрании в 16:45, получит электронное письмо в 16:45 примерно так же.

Поскольку этот сайт размещен на общем сервере, мы не имеем никакого контроля над сервером для запуска любого приложения SQL Job или планировщика.

Есть ли в asp.net что-нибудь, что может помочь в этом сценарии?

Ответы [ 9 ]

9 голосов
/ 23 апреля 2009

Как насчет этого: Имитация службы Windows с использованием ASP.NET для запуска запланированных заданий .

В какой-то момент эта техника использовалась при переполнении стека , хотя я не думаю, что это больше.

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

4 голосов
/ 23 апреля 2009

Вам нужно выполнить работу на сервере, но у вас нет хорошего способа вызвать ее из ASP.NET?

.

Как насчет создания веб-страницы, которая запустит вашу работу и запустит таймер в другом месте (например, на другом компьютере), который запрашивает эту страницу. (Просто нажмите на страницу, чтобы вызвать вас на работу)

3 голосов
/ 23 апреля 2009

У меня была та же проблема, что и у вас, и в итоге я запрограммировал службу, которая использует Quartz.NET: http://quartznet.sourceforge.net/ и подключается к той же базе данных, что и веб-сайт.

2 голосов
/ 23 апреля 2009

С ASP.NET вы не гарантируете, что ваше приложение постоянно работает, и, следовательно, веб-приложения как хост-процесс для решения по планированию неосуществимы IMO.

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

Можете ли вы разместить такой сервис на другом компьютере? Даже если веб-приложение запущено на размещенном сервере, это не значит, что вы должны запускать планировщик на том же сервере.

1 голос
/ 23 апреля 2009

Однако, если вы действительно застряли и у вас нет другого выбора, кроме как разместить его в своем WebApp,

Вы можете посмотреть, как создать экземпляр System.Timers.Timer в файле Global.asax.cs. Подключите событие Elapsed, как обычно, и дайте ему некоторый код, который делает что-то вроде

protected void myTimer_Elapsed(object sender, EventArgs e)
{
    if(System.DateTime.Now Falls in Some Configured Time-Window)
        //Do Stuff
}

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

1 голос
/ 23 апреля 2009

Если вы действительно не имеете никакого контроля над сервером (то есть вы не можете использовать задание sql, запланированное задание или установить сервер Windows), тогда вы можете использовать System.Threading.Timer , который вы инициализируйте в вашем Global.asax (например, при запуске приложения), который вызывает определенный метод в вашем приложении каждые x минут. Затем этот метод будет запрашивать вашу базу данных и видеть, какие уведомления нужно отправлять.

Хотя это действительно нежелательный подход, поскольку, как я знаю, не всегда гарантируется, что таймер всегда будет вызывать, поскольку, как говорит Питер, ваше веб-приложение не всегда будет работать.

Однако, в зависимости от ваших требований, это может быть подход «достаточно хорошим», если у вас нет других вариантов.

0 голосов
/ 20 февраля 2010

Я не верю тебе, потому что источник код Quartz.Net (1.0 и 1.0.1) не компилируется под Visual Studio.Net 2005 и 2008. Единственный способ получить Quartz.Net значит использовать целое Spring.Net пакет, который компилирует штраф по VS.Net 2005 и 2008

Если вы не могли бы поделиться некоторыми советами, как скомпилировать и использовать quartz.dll в проект asp.net! (веб-страница Quartz.Net и readme.txt не предоставить любую информацию об источнике сборник куде) Каждый совет приветствуется!

Сначала у меня тоже были проблемы, но это потому, что необходимый файл AsemblyInfo.cs содержится в родительской папке. Кроме того, вам нужно добавить три библиотеки DLL, которые включены.

0 голосов
/ 16 июля 2009

Я не верю вам, потому что исходный код Quartz.Net (1.0 и 1.0.1) не компилируется в Visual Studio.Net 2005 и 2008. Единственный способ получить Quartz.Net - использовать весь Spring Пакет .Net, который отлично компилируется под VS.Net 2005 и 2008

Если вы не могли бы поделиться некоторыми советами, как скомпилировать и использовать quartz.dll в проекте asp.net! (веб-страница Quartz.Net и readme.txt не предоставляют никакой информации о компиляции исходного кода). Каждый совет приветствуется!

0 голосов
/ 23 апреля 2009

Это на самом деле нежелательно, но вы можете делать то, что предлагает Раззи. Я видел это сделано много раз. Хотя некрасиво, иногда тебе просто нужно делать отвратительные хаки.

Используя этот метод, вы должны убедиться, что ваше приложение не выгружено. Так что вам нужно как-то поддерживать жизнь. Я бы предложил настроить инструмент веб-мониторинга, который будет постоянно тянуть страницу (aspx), чтобы поддерживать приложение в рабочем состоянии. Эти ребята свободны http://mon.itor.us/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...