编辑:解决了,问题在服务器端。
我正在使用C#和.NET2,我想知道这是一个WebRequest错误。我用这个方法做了几个很好的请求,一切都很好,但之后每次我都会得到“操作已超时”。我真的不明白为什么会这样。
public string RequestPage(string url) {
HttpWebRequest req = null;
string line = "";
string site = "";
try {
req = (HttpWebRequest) WebRequest.Create(url.Trim());
req.Timeout = 10000;
StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream());
while ((line = reader.ReadLine()) != null) {
site += line;
}
return site;
} catch (Exception ex) {
MessageBox.Show("ERROR " + ex.Message);
}
return null;
}发布于 2010-08-20 21:43:43
我不知道这是否解决了您的问题,但是当您完成时,您应该始终处理一个HttpWebResponse (和其他实现IDisposable的对象):
public string RequestPage(string url)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Timeout = 10000;
using (WebResponse resp = req.GetResponse())
using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
{
return reader.ReadToEnd();
}
}如果您实际上不需要HttpWebRequest的所有功能,则可以使用WebClient:
public string RequestPage(string url)
{
using (WebClient client = new WebClient())
{
return client.DownloadString(url);
}
}发布于 2010-08-20 21:43:22
您没有处理响应:
using (WebResponse response = req.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream())
{
while ((line = reader.ReadLine()) != null) {
site += line;
}
}基本上,您与之交谈的每台服务器都有池化连接。因为没有关闭响应,所以它们快用完了。上面的内容应该会解决这个问题。
此外:
这是建立字符串的一种潜在的,非常慢的方式。,,
StringBuilder在循环中连接文本内容。reader.ReadToEnd()。https://stackoverflow.com/questions/3531252
复制相似问题