我能重用HttpWebRequest吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

似乎每个请求都会创建一个新的连接,所以我想知道是否可以通过更改url并再次获得请求来重用HttpWebRequest。下面是所讨论的代码。此代码检查是否存在URL范围。

    static void storeList(TextWriter sw, string urlTemplate, int start, int end)
    {
        for (int i = start; i < end; i++)
        {
            var url = string.Format(urlTemplate, i);
            var req = (HttpWebRequest)HttpWebRequest.Create(url);
            {
                req.Method = "HEAD";
                tryHttpWebRequest
                {
                    var resp = req.GetResponse();
                    sw.WriteLine(i);
                }
                catch (Exception e)
                {
                }
            }
        }
        sw.Flush();
    }
提问于
用户回答回答于

你应该会没事的,如果你只是打电话接近你的反应。只允许这么多“打开”连接,所以它失败的原因是它无法打开新连接。

MSDN文章:

必须调用Stream.Close或HttpWebResponse.Close方法来关闭响应并释放连接以供重用。没有必要同时调用Stream.Close和HttpWebResponse.Close,但是这样做不会导致错误。

用户回答回答于

创造一个新的。我不担心在这个场景中是否高效,因为我认为.NET环境+HTTP保持生命应该从这个角度来处理问题。

可能遇到了两个问题:

(1)打开连接的数量问题;关闭连接,错误就会消失;

(2)服务器上每秒请求数量限制的问题(反DoS之类的东西)。我首先尝试#1,因为它更简单,然后如果仍然看到问题,检查服务器是否收到请求,但拒绝它。

扫码关注云+社区