繁体   English   中英

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

[英]Calling a aspx page from windows service - Problem

我有一个 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)
        {
        }
    }

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

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

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

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

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

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

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

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

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

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

是的,我们需要代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM