编辑:解决了,问题是服务器端。
我正在使用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;
}
答案 0 :(得分:2)
你没有处理回应:
using (WebResponse response = req.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream())
{
while ((line = reader.ReadLine()) != null) {
site += line;
}
}
基本上,您与之交谈的每台服务器都有池化连接。由于你没有关闭响应,你的用完了。以上内容应该解决。
此外:
StringBuilder
在循环中连接文本内容。reader.ReadToEnd()
。答案 1 :(得分:2)
我不知道这是否解决了你的问题,但你应该在完成后处理一个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);
}
}