Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top