Повторяющийся таймер в Asp.net - PullRequest
0 голосов
/ 22 июня 2010

Я пытаюсь реализовать функцию таймера повторения asp.net. Я не могу создать службу Windows, так как я размещаю сайт в общей среде и поэтому не имею доступа.

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

Я пытался реализовать httphandler, который будет запускать один объект System.Threading.Timer для циклического выполнения каждую минуту и ​​выполнения некоторой работы Возможно добавление в очередь других рабочих элементов.

Вот что у меня есть:

public class Scheduler : IHttpHandler
{
    protected static TimerCallback tcb = null;
    protected static Timer timer = null;

    static Scheduler()
    {

        tcb = new TimerCallback(DoWork);
        timer = new Timer(tcb, null, TimeSpan.Zero, new TimeSpan(0, 0, 1, 0));
    }

    private static void DoWork(Object stateInfo)
    {
    }

    public void ProcessRequest(HttpContext context)
    {

    }

    public bool IsReusable
    {
        get { return false; }
    }

}

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

Мой вопрос таков: вышеприведенный подход далеко от истины? Есть лучший способ сделать это? Будет ли более разумным отказаться от статических переменных и сохранить таймер в состоянии приложения?

Извините, мне нужны информированные мнения. Я чувствую, что я хожу по кругу.

Спасибо

1 Ответ

1 голос
/ 25 июня 2010

Это полный взлом, надеюсь, я не проголосую!- но вы могли бы разработать компонент, который является частью вашего веб-развертывания, который отправляет запрос Http обработчику на том же сайте - таким образом (я полагаю) ваше приложение сможет вызывать себя, чтобы убедиться, что оно не выгружено.увидеть класс WebClient - извините, не уверен, какое пространство имен находится на моей голове.

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

...