0

我有一个在一定时间间隔后调用页面的 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)
        {
        }
    }
4

5 回答 5

1

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

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

如果它停止,计时器代码也可能会出现故障......

于 2009-02-25T07:47:36.723 回答
1

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

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

添加“finally”子句并正确处理您的对象!

于 2009-08-26T07:21:28.703 回答
0

您请求页面的方式可能会引发未处理的异常,从而使服务处于不可操作状态。

是的,我们需要代码。

于 2009-02-25T07:51:26.530 回答
0

我认为您在处理 StreamReader、WebRequest 等对象时遗漏了一些东西。您应该在使用它们后处理昂贵的对象。

于 2009-02-25T07:51:38.133 回答
0

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

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

@jscharf 的解释对我来说看起来和任何解释一样好。

于 2011-03-09T13:52:13.540 回答