【问题标题】:HttpWebRequest keep alive - how is the connection reused by .net?HttpWebRequest 保持活动状态 - .net 如何重用连接?
【发布时间】:2011-10-06 08:10:04
【问题描述】:

嘿, 我在 10 个并发线程中使用 HttpWebRequest 来下载图像列表。我在主机名之后对图像进行了排序,因此每个线程都从相同的主机名获取图像。

HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
myReq.ServicePoint.ConnectionLimit = 10;
myReq.Timeout = 2000;
myReq.KeepAlive = true;

HttpWebResponse myResp = (HttpWebResponse )myReq.GetResponse();

程序运行一段时间后,我不断收到超时异常。 我的想法是我得到了异常,因为主机服务器可能对来自同一用户的并发连接有一些限制。

那么如何在 .net 中重用连接? 在我的程序中,每个线程都在创建与主机名的新连接,或者由于 KeepAlive 属性而重用现有的连接??

【问题讨论】:

  • “在我的程序中,每个线程都在创建与主机名的新连接,或者由于 KeepAlive 属性而重用现有连接?”的结果是什么?
  • 对于支持 http 1.1 协议的服务器,它正在重用连接。同时从同一个域请求图像也很重要,这样我就不会经常打开超过 10 个连接。即使您正在完成一个请求,.Net 也有一种自动执行此操作的方法。

标签: c# .net httpwebrequest http-headers


【解决方案1】:

似乎问题出在某些使用 http/1.0 的服务器上。 HttpWebRequest 为using 100 继续行为但服务器不支持。

所以我将属性System.Net.ServicePointManager.Expect100Continue 更改为false,然后一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2021-09-13
    • 2013-08-27
    相关资源
    最近更新 更多