WebRequest错误?

时间:2010-08-20 13:29:05

标签: c# http httpwebrequest c#-2.0

编辑:解决了,问题是服务器端。

我正在使用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;
    }

2 个答案:

答案 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);
    }
}