Реализация планировщика заданий для ASP.NET MVC - PullRequest
1 голос
/ 24 ноября 2010

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

Я хочу сохранитьQoS на моем веб-сервере (производительность, потребление памяти, ...).Итак, я думаю о выполнении внешнего процесса для этих действий вместо вызова в потоке.Что-то похожее на процессор Apache MPM (он запускает дочерние процессы для обработки запросов).

  • Знаете ли вы какое-нибудь лучшее решение для этого?любая библиотека, которая может сделать это для меня?

Спасибо заранее.

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

Не могли бы вы сделать что-то похожее на сайты Stack Exchange?

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

1 голос
/ 25 ноября 2010

Ну, я наконец-то внедрил систему для выполнения задач / заданий во внешнем процессе.

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

По сути, у нас есть два компонента: Web.dll (приложение ASP.NET) и программа под названием TaskExecutor.exe

* 1008.* В Web.dll есть планировщик действий, который может регистрировать задачи по имени: например:
ActivityScheduler.Get().RegisterActivity("GenerateSearchIndexes", 4 * 1000 * 60 * 60); //each 2 hours

Планировщик действий выполняет каждое действие в потоке, и этот поток вызывает внешний процесс,ActivityExecutor.exe

Эта сборка имеет ссылку на Web.dll, в котором есть статический ActivityFactory для получения действий.Исходный код внешнего процесса довольно прост:

public static void Main (string[] args)
{
    try
    {
        if (args.Length == 0)
        {
            throw new ArgumentException("No activity name given", "ActivityName");
        }
        //parameter 0 is the activity name
        string activityName = args[0];
        IScheduledActivity activity = ActivityFactory.GetActivity(activityName);

        if (activityName != null)
        {
            activity.Execute(args);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error executing activity: " + ex.Message);
    }
}

Как вы можете догадаться, ограничение здесь состоит в том, что действия должны быть определены статически, чтобы они не могли получать параметры в своем конструкторе.Они передаются в методе IScheduledActivity.Schedule(string[] args), так же как и в программе.

1 голос
/ 24 ноября 2010

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

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