从Windows服务调用aspx页面 - 问题

时间:2009-02-25 07:43:13

标签: c# windows-services timer

我有一个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 个答案:

答案 0 :(得分:1)

嗯,代码是什么样的? WebClient是查询网页的最简单方法:

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

如果定时器代码停止运行,那么它也可能会出现故障...

答案 1 :(得分:1)

HttpWebRequest可能会限制特定页面或服务器的并发HTTP请求数,这通常是正确的HTTP客户端实践。

您没有正确处理对象的事实很可能意味着您正在维护与特定页面的2或3个连接,每个连接都具有较大的timout值,而HttpWebRequest正在排队或忽略您的请求,直到前几个完成(die从客户端或服务器超时,在这种情况下很可能是服务器。)

添加'finally'子句并妥善处理您的对象!

答案 2 :(得分:0)

可能您请求页面的方式是抛出未处理的异常,使服务处于不可操作状态。

是的,我们需要代码。

答案 3 :(得分:0)

我认为你错过了一些关于处理像StreamReader,WebRequest等对象的东西。你应该在使用它们之后处理昂贵的对象。

答案 4 :(得分:0)

在服务的背景下,Marc的建议对我有用

使用WebClient可靠地工作,WebRequest超时。

@jscharf解释看起来和我一样好。