【问题标题】:GetWebResponse very slow on windows7Windows 7 上的 GetWebResponse 非常慢
【发布时间】:2013-08-12 16:34:09
【问题描述】:

我已经尝试了所有设置,我在互联网上找到了让 C# webclient 在 Windows7 机器上快速运行 无济于事。 Windows XP 机器上的同一个 exe 对每个请求的响应时间不到 100 毫秒。

我已经覆盖了派生类中的 GetWebRequest 函数 System.Web.Services.Protocols.SoapHttpClientProtocol

    protected override WebRequest GetWebRequest(Uri address)
    {
        //ServicePointManager.UseNagleAlgorithm = false;
        HttpWebRequest.DefaultWebProxy = null;
        ServicePointManager.DefaultConnectionLimit = 4096;
        ServicePointManager.Expect100Continue = false;
        System.Net.ServicePointManager.CheckCertificateRevocationList = false;
        HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
        request.Proxy = HttpWebRequest.DefaultWebProxy;

        return (WebRequest)request;
    }

受保护的覆盖 WebResponse GetWebResponse(WebRequest 请求) {

        HttpWebResponse response = null;
        //HttpWebRequest.DefaultWebProxy = null;
        //ServicePointManager.Expect100Continue = false;
        response = (HttpWebResponse)base.GetWebResponse(request);
        return response;
    }

我还在 machine.config .Net4.0 文件夹中添加了套接字跟踪设置 它总是在输出窗口中等待下面的语句7-15秒

System.Net.Sockets 详细:0:[6088] Socket#54042743::Receive()

希望某个英雄解决了这个问题

【问题讨论】:

    标签: c#


    【解决方案1】:

    尝试使用 GetResponse 类并检查您是否发现了一些差异:

    HttpWebRequest wrequest = (HttpWebRequest) WebRequest.Create(objeto.Url);
    
    //Get Response
    HttpWebResponse wresp = (HttpWebResponse) wrequest.GetResponse();
    
    //get Response Stream
    StreamReader sr = new StreamReader(wresp.GetResponseStream());
    
    //Get string content
    string respuestastring = sr.ReadToEnd();
    

    【讨论】:

    • 仅供参考,当我运行 Fiddler 工具时,响应也很快。所以我确信这与代理保护的覆盖 WebRequest GetWebRequest(Uri address) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);返回(WebRequest)请求; }
    • 受保护的覆盖 WebResponse GetWebResponse(WebRequest wrequest) { HttpWebResponse response = (HttpWebResponse)wrequest.GetResponse(); //获取响应流 StreamReader sr = new StreamReader(response.GetResponseStream()); //获取字符串内容 string respuestastring = sr.ReadToEnd();返回响应; }
    • 没有。在IE设置中,1.自动检测设置,2.使用自动配置,3。为您的 LAN 使用代理服务器已全部禁用
    • 嗨 Carlos,你所说的 GetResponse 类是什么意思,你能举个例子吗,我是 c# 新手
    • 我的回答,这是在 c# 中进行 http 请愿的最常见方式。我告诉你试试看。不需要覆盖 Windows 7 中的任何内容。http 请愿书在 xp 和 win 7 中应该具有相同的速度。使用我的代码。通过 url 字符串更改 objeto.URL 并对其进行调试;)
    【解决方案2】:

    我遇到了同样的问题,结果我没有关闭网络请求,所以当我连续触发几个时,我达到了主机允许的最大连接数,但它不会继续,直到第一个请求超时。因此,请尝试手动关闭您的请求,或者更好的是,将您的请求的变量声明包装到 using 指令中。

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 2015-07-11
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多