2015-02-10 98 views
0

使用值對鉻的高級REST客戶端,當我在相同的價值觀和設置飼料在我的點網4.0的應用程序使用的正常工作。另一方面,當我嘗試從dotnet使用客戶端REST服務時,當我調用webRequest.GetRequestStream()時異常{「底層連接已關閉:一個意外錯誤發生在發送。「},HREsult -2146233079,內部異常」「驗證失敗,因爲遠程方已關閉傳輸流。」HResult -2146232800 這是我的代碼,但我已更改了一些值以保護我的客戶的詳細信息System.Net.WebException當試圖張貼到RESTful服務

當代碼嘗試getrequeststream()時,我的提琴手監視器會提出2個條目來顯示我的應用程序正在聯繫服務器。它不應該只是創建一個包含授權標頭和json內容的整個數據包並在一次調用中發送它?或者是t他的POST通常如何工作? Fiddler從來不會從Chrome的ARC中挑選活動,所以我無法比較。

我試過的WebRequest,Web客戶端,HttpWebRequest的等,並不能得到其中的任何工作。 (我無法使用新的webclient類,因爲我的主要應用程序是dotnet 4.0)。我以管理員模式運行VS。 chrome的高級REST客戶端如何工作,但我的不是?有什麼不同?

string parsed = @" { 
    "data": { 
    "workoutDate": "2015-01-23", 
    "exerciseType": "TREADMILL", 
    "workoutDuration": 1456, 
    "distance": 1382.0, 
    "energyConsumed": 567068.0, 
    "averageHeartRate": 75.0, 
    "averageSpeed": 1.0 
    }, 
    "user": { 
    "email": "[email protected]", 
    "firstName": "Len", 
    "lastName": "BlTestoomers", 
    "gender": "MALE", 
    "dateOfBirth": "1984-10-27" 
    } 
}"; 
    // Add authorization headers 
    string authentication = string.Format("Authorization: RRgym SNUFFCENTRE:{0}:gymId246", EyupSecurityKey.GenerateAuthenticationKey()); 

    // Convert the parsed string into byte[] 
    byte[] buffer = Encoding.UTF8.GetBytes(parsed); 

    string addr = "https://equipment.test.pogram.uk/acr-rest/equipment/v1/workout/endurance"; 

    WebRequest webRequest = WebRequest.Create(addr); 
    webRequest.Method = WebRequestMethods.Http.Post; 
    webRequest.ContentType = "application/json"; 
    webRequest.ContentLength = buffer.Length; 
    webRequest.Headers.Add(authentication); 

    Stream newStream = webRequest.GetRequestStream(); 
    // Send the data. 
    newStream.Write(buffer, 0, buffer.Length); 
    newStream.Close(); 

} 

回答

2

我會後這個幫助別人可能有同樣的問題。

我已經被客戶聯絡說,我的問題可能是因爲他們的服務器設置爲比基本視覺工作室更高的安全級別。 (Chrome ARC必須正確處理它)。

所以我必須設置 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 就在創建我的webrequest之前。

不幸的是,這不是支持dotnet4.0但在4.5,所以我需要拿出一個固定的協議。但那是另一天:)