• HttpWebRequest操作已超时


    最近我们使用.NET3.5HttpWebRequest会报操作已超时但使用.NET4.0版本及以上却可以正常访问。

    一段简单的代码如下:

    string returnData = "";

    try
    {

    HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(url);

    webReq.Timeout = 30000;
    webReq.KeepAlive = true;
    webReq.Method = "POST";
    webReq.ContentType = "application/xml; charset=utf-8";
    webReq.ContentLength = buffer.Length;
    webReq.ServicePoint.Expect100Continue = false;
    Stream reqStream = webReq.GetRequestStream();
    reqStream.Write(buffer, 0, buffer.Length);
    reqStream.Close();

    using (HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse())
    {

    using (StreamReader sr = new StreamReader(webResp.GetResponseStream(), Encoding.GetEncoding("utf-8")))
    {
    returnData = sr.ReadToEnd();
    }
    }

    }
    catch (Exception ex)

    {

    }

    在两个不同.NET版本下3.5会报操作超时,4.0版本及以上可以正常访问

    后来我们发现请求的URL是HTTPS。我们只是改变了HTTP和HTTPS的代码又试了一次。但改变HTTPS HTTP不是解决方案。它是一个快速修复。
    使用HTTPS的网站在浏览器中工作。我们得到了来自浏览器的所有响应。然而,我们得到这个错误和HttpWebRequest。HttpWebRequest曾与HTTP URL而不使用HTTPS。
    后来我们开始调查这个问题。我们确保我们的防火墙配置正确。我们联系了第三方的人说他们不使用HTTPS请求。很显然,有一些问题。我们发现HttpWebRequest卡在密钥交换阶。
    解决方案
    然后我们被迫使用HttpWebRequest ssl3代替TLS。
    servicepointmanager.securityprotocol=securityprotocoltype.ssl3;
    这里的指定HttpWebRequest的安全协议可以解决.NET3.5版本操作超时的问题,即第三方进行了协议规范。而.NET3.5版本和4.0及以上版本默认协议是有一些差异的。由此原因引发的请求超时

  • 相关阅读:
    Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)
    Android开发指南(35) —— Toast Notifications
    Android开发指南(37) —— Data Backup
    Android开发指南(36) —— Search
    [转]闲话操作系统1
    [从架构到设计]第二回:对象的旅行对象和人,两个世界,一样情怀
    [Thinking]从赢在中国,思考博客园的商业化
    [你必须知道的.NET]目录导航
    070809
    [CLR团队公告]CLR基础研究团队纲领
  • 原文地址:https://www.cnblogs.com/xinwuhen/p/5420353.html
Copyright © 2020-2023  润新知