[英]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.