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及以上版本默認協議是有一些差異的。由此原因引發的請求超時


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM