这篇文章上次修改于 662 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

今天发现 HttpWebRequest.GetRequestStream 首次请求的时候很慢,大概要十几秒才返回。网上搜了很多,尝试了如下方法均未奏效:

  • 通过代码的方式关闭代理,httpWebRequest.Proxy = null
  • 在 App.config 配置文件中增加如下内容,关闭默认代理:

      <?xml version="1.0"?>
      <configuration>
        <startup>
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
        </startup>
        <system.net>
          <defaultProxy enabled="false" useDefaultCredentials="false" >
            <proxy/>
            <bypasslist/>
            <module/>
          </defaultProxy>
        </system.net>
      </configuration>
      
  • 设置流写入超时时间,httpRequest.GetRequestStream().WriteTimeout = 500
  • 禁用 VMWare 的几个虚拟网卡

后面实在没辙,只好使用 dnSpy 调试功能进入 GetRequestStream 内部进行调试,最终发现耗时操作发生在 Dns 解析远程服务器域名时。

赶紧检查网卡设置的 首选 DNS 服务器,发现设置的是 114.114.114.114,上网查了下,成都地区电信的首选 DNS 服务器是:202.98.96.68,备用 DNS 服务器是:61.139.2.69。赶紧设成这两个,再一试,首次请求 400 毫秒左右,基本正常,问题解决。