2015-02-10 91 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,所以我需要拿出一个固定的协议。但那是另一天:)