2016-01-08 49 views
2

我們剛剛推出了一項新服務,在針對.Net 4.5框架時,我們無法從非常基本的c#控制檯應用程序連接到該服務。HttpWebRequest調用GetResponse,使用.net 4.5失敗,但使用net 4.6

我們首先發現在ASP MVC網站的問題,但已經打破它分解成最簡單的簡單的控制檯應用程序來幫助找出問題

代碼段(沒有別的):

string myURL = @"https://<myurl>.com/<myurl>"; 
using (var httpClient = new HttpClient()) 
{     
    var request = (HttpWebRequest)WebRequest.Create(myURL); 
    request.Method = "GET"; 
    request.ContentLength = 0; 
    request.ContentType = "text/xml"; 

    using (var response = (HttpWebResponse)request.GetResponse()) 
    { 
     if (response.StatusCode != HttpStatusCode.OK) 
     { 
      ... 
     } 
     else 
     { 
      ... 
     } 
    }     
} 

會發生什麼

  • 網絡異常 - 關閉底層連接。
  • 扔在調用的GetRequest

服務信息

  • HTTPS服務
  • SHA-256。

其它差異

  • 檢查在中間窗口的請求變量被髮送顯示沒有差異之前。
  • 在嘗試調用之後檢查請求變量會顯示一個區別 - System.Net.HttpWebRequest.Pipelined在成功嘗試中爲true,在嘗試失敗時爲false。

設置要點

  • 負載平衡器,之間兩個API的託管在IIS平衡。

它曾經工作過嗎?

是的!

  • 如果該URL被放入瀏覽器 - 它的工作原理。
  • 如果我重新編譯以.net 4.6框架爲目標的代碼 - 它的工作原理。
  • 如果我直接連接到IIS中的站點(通過http)它的工作原理。

那我問

  • 什麼導致這個問題呢?
  • 你見過類似的東西,並有可能的補救措施的建議嗎?
  • 您將採取哪些進一步措施來幫助調試/解決問題。
  • 將如何改變版本的.NET Framework 4.6影響的HttpClient或HttpWebRequest的?」

感謝, 鋁。

+2

願你的服務使用TLSv1.2工作如果是這樣,你可以添加以下到您的代碼:'ServicePointManager.SecurityProtocol = SecurityProtocolType .Tls12;' – Pikoh

+1

Am azing!這就對了。謝謝。如果你想添加它作爲答案,我會接受它。再次感謝! –

+0

很高興幫助:) – Pikoh

回答

3

這通常是由服務器使用TLS 1.2版引起的。我認爲, NET4.5默認爲TLS V1.1,所以你必須添加到您的代碼:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
+0

謝謝。節省了我的時間。所以這是這些問題的根源:) – Rigin

相關問題