HttpWebRequest操做已超时

最近咱们使用.NET3.5HttpWebRequest会报操做已超时但使用.NET4.0版本及以上却能够正常访问。web

一段简单的代码以下:浏览器

string returnData = "";安全

try
{app

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();
}
}url

}
catch (Exception ex)spa

{xml

}utf-8

在两个不一样.NET版本下3.5会报操做超时,4.0版本及以上能够正常访问ssl

后来咱们发现请求的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及以上版本默认协议是有一些差别的。由此缘由引起的请求超时

相关文章
相关标签/搜索