2015-02-10 3 views
0

Использование значений для расширенного клиента REST для хром отлично работает, когда я загружаю те же значения и настройки, что и в моем приложении dot net 4.0.System.Net.WebException при попытке webRequest.GetRequestStream при попытке POST для службы RESTful

С другой стороны, когда я пытаюсь использовать службу REST клиентов из dotnet, мое приложение сразу же падает, когда я вызываю webRequest.GetRequestStream() с исключением {«Подключенное соединение было закрыто: произошла непредвиденная ошибка на send. "}, HREsult -2146233079, внутреннее исключение" "Ошибка аутентификации, поскольку удаленная сторона закрыла транспортный поток." HResult -2146232800 Вот мой код, но я изменил некоторые значения, чтобы защитить данные моего клиента.

Когда код пытается getrequeststream(), мой монитор fiddler поднимает 2 записи, чтобы показать, что мое приложение связывается с сервером. Разве это не просто создание целого пакета с заголовками полномочий и содержимым json и отправка его одним вызовом? или t как работает POST? Fiddler никогда не поднимает активность от ARC хрома, поэтому я не могу сравнивать.

Я пробовал WebRequest, webclient, httpwebrequest и т. Д. И не могу заставить их работать. (Я не могу использовать новый класс webclient, поскольку моим основным приложением является dotnet 4.0). Я запускаю VS в режиме администратора. Как может работать хромированный клиент 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; перед созданием моего веб-запроса.

К сожалению, это протокол, который не поддерживается в dotnet4.0, но находится в версии 4.5, поэтому мне нужно придумать исправление. Но это еще один день :)

Смежные вопросы