Проблема с обработчиком событий в службе Windows - PullRequest
0 голосов
/ 05 января 2011

Я схожу с ума.Я не могу понять проблему.

У меня есть служба Windows, которая имеет простой метод таймера.Если я запускаю сервис, он всегда выдает исключение при событии onTimerElapsed.Но если я напишу свои методы XMLOperation в другом методе (но не в таймере, который мне нужен только) и вызову его из program.cs, он будет работать нормально.Рабочий код также находится внизу.

partial class DatabaseService : ServiceBase
{
    Timer timer = new Timer();

    public DatabaseService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {   
        timer.Interval = 10000;
        timer.Enabled = true;

        timer.Elapsed += new ElapsedEventHandler(onElapsedTime);
        timer.Start();
    }

    protected override void OnStop()
    {
        timer.Enabled = false;
    }

    public void onElapsedTime(object source, ElapsedEventArgs e)
    {
        try
        {
            XMLOperations operation = new XMLOperations();
            operation.WebServiceFlexiCampaigns("http://www.flexi.com.tr/data/xml/pazaryeri/mobil.xml");
            operation.WebServiceShopMilesCampaignsXMLRead("http://www.shopandmiles.com/xml/3_119_3.xml");
            operation.WebServiceBonusCampaignsXMLRead("http://www.bonus.com.tr/apps/getcampaignxml.aspx?type=campaigns");
        }

        catch (Exception ex)
        {
            StreamWriter SW;
            SW = File.CreateText("c:\\1.txt");
            SW.WriteLine(ex.Message);
            SW.Close();
        }

    }

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

partial class DatabaseService : ServiceBase
{
    Timer timer = new Timer();

    public DatabaseService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        timer.Interval = 10000;
        timer.Enabled = true;

        timer.Elapsed += new ElapsedEventHandler(onElapsedTime);
        timer.Start();
    }

    protected override void OnStop()
    {
        timer.Enabled = false;
    }
    public void test()
    {
        try
        {
            XMLOperations operation = new XMLOperations();
            operation.WebServiceFlexiCampaigns("http://www.flexi.com.tr/data/xml/pazaryeri/mobil.xml");
            operation.WebServiceShopMilesCampaignsXMLRead("http://www.shopandmiles.com/xml/3_119_3.xml");
            operation.WebServiceBonusCampaignsXMLRead("http://www.bonus.com.tr/apps/getcampaignxml.aspx?type=campaigns");
        }
        catch (Exception ex)
        {
            StreamWriter SW;
            SW = File.CreateText("c:\\1111.txt");
            SW.WriteLine(ex.Message);
            SW.Close();
        }
    }

1 Ответ

1 голос
/ 05 января 2011

Вы можете попробовать эту ветку (см. Ответ SamAgain):

http://social.msdn.microsoft.com/Forums/en/clr/thread/8fbca78b-5078-4a12-8abb-4051076febbb

Надеюсь, это сработает.

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