Вызов страницы aspx из службы Windows - проблема - PullRequest
0 голосов
/ 25 февраля 2009

У меня есть служба Windows, которая вызывает страницу через определенный промежуток времени. Страница в свою очередь создает несколько отчетов. Проблема в том, что сервис перестает делать что-либо после 2-3 звонков. так как он вызывает страницу 2-3 раза, а затем не выполняет никакой работы, хотя показывает, что служба работает ... я использую таймеры в своем сервисе пожалуйста, может кто-нибудь помочь мне с решением здесь спасибо

код: (где t1 - мой таймер)

protected override void OnStart(string[] args)
    {
            GetRecords();
            t1.Elapsed += new ElapsedEventHandler(OnElapsedTime);

            t1.Interval = //SomeTimeInterval
            t1.Enabled = true;
            t1.Start();

    }

    private void OnElapsedTime(object source, ElapsedEventArgs e)
    {
        try
        {
            GetRecords();
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry(ex.Message);
        }

    }

    public void GetRecords()
    {


        try
        {
            string ConnectionString = //Connection string from web.config
            WebRequest Request = HttpWebRequest.Create(ConnectionString);
            Request.Timeout = 100000000;
            HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();


        }
        catch (Exception ex)
        {
        }
    }

Ответы [ 5 ]

1 голос
/ 26 августа 2009

Возможно, что HttpWebRequest ограничит количество одновременных HTTP-запросов определенной страницей или сервером, как правило, является правильной практикой HTTP-клиента.

Тот факт, что вы неправильно распределяете свои объекты, скорее всего означает, что вы поддерживаете 2 или 3 соединения с определенной страницей, каждая из которых имеет большое значение тайм-аута, и HttpWebRequest ставит в очередь или игнорирует ваши запросы до тех пор, пока не выполнятся первые несколько (die от тайм-аута клиента или сервера, скорее всего, сервера в этом случае).

Добавьте предложение 'finally' и правильно распоряжайтесь своими объектами!

1 голос
/ 25 февраля 2009

Ну, как выглядит код? WebClient - это самый простой способ запроса страницы:

    string result;
    using (WebClient client = new WebClient()) {
        result = client.DownloadString(address);
    }
    // do something with `result`

Код таймера также может быть сбой, если он останавливается ...

0 голосов
/ 09 марта 2011

Совет Марка сработал для меня в контексте услуги

Использование WebClient работало надежно, время ожидания WebRequest истекло.

@ jscharf объяснение выглядит так же хорошо, как и любое другое для меня.

0 голосов
/ 25 февраля 2009

Я думаю, что вы что-то упускаете в утилизации ваших объектов, таких как StreamReader, WebRequest и т. Д. Вы должны утилизировать дорогие объекты после их использования.

0 голосов
/ 25 февраля 2009

возможно, способ, которым вы запрашиваете на странице, вызывает необработанное исключение, которое оставляет службу в неработоспособном состоянии.

Да, нам нужен код.

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