我有一个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)
{
}
}
答案 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解释看起来和我一样好。