Как создать службу, которая запускается по таймеру для запроса внешней веб-службы?

Я немного ошеломлен возможностями и лучшим способом справиться с этим. Мне нужна веб-служба, размещенная в Windows Azure, которая запускает таймер и по истечении прошедшего времени будет запрашивать внешнюю веб-службу, обрабатывать полученные данные и импортировать их в мою базу данных SQL Azure. В настоящее время я размещаю веб-службу WCF и веб-сайт в Windows Azure вместе с базой данных SQL Azure. Я попробовал рабочую роль, но она запускается только один раз и завершает работу после завершения метода Run, даже если вы добавите таймер и запустите таймер с интервалом. Лучшее решение приветствуется! Спасибо.


person user1940031    schedule 31.12.2012    source источник


Ответы (1)


Хитрость заключается в том, чтобы рабочая роль НИКОГДА не выходила из метода "Выполнить". Что-то типа:

    public override void Run()
    {
        while (true)
        {
            Thread.Sleep(10000);
        }
    }

Теперь, перейдя к вашему вопросу, вы можете просто реализовать объект Timer в своей рабочей роли, и когда таймер истечет, вы сделаете вызов этой внешней веб-службы. Вы можете реализовать свой собственный таймер, используя следующий код:

    public override void Run()
    {
        System.Timers.Timer timer = new System.Timers.Timer(1000);
        timer.Elapsed += timer_Elapsed;
        while (true)
        {
            Thread.Sleep(10000);
        }
    }

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        //Execute the code to call the web service
    }

Однако для реализации таймеров мне больше всего нравится библиотека Quartz (http://quartznet.sourceforge.net/). Я нашел его довольно простым в использовании и довольно гибким, плюс он с открытым исходным кодом.

Надеюсь это поможет.

person Gaurav Mantri    schedule 01.01.2013