Я пытаюсь получить тело сообщения от веб-службы (расположенной по адресу http://www.ekkuli.net/conflict_call.php),, которая возвращает тег «Transfer-Encoding: chunked» и 409 Conflict response, используя следующий код:
String webAddr = "http://www.ekkuli.net/conflict_call.php";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
httpWebRequest.ServicePoint.Expect100Continue = false;
httpWebRequest.Accept = "application/json";
httpWebRequest.KeepAlive = true;
try {
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
String myJson = "{ \"method\" : \"just testing\" }";
streamWriter.Write(myJson);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
var responseText = streamReader.ReadToEnd();
}
} catch (WebException ex) { // Catch 409 Conflict response
try {
// Try to get message body from 409 Response
var s = ex.Response.GetResponseStream();
var sr = new System.IO.StreamReader(s);
var content = sr.ReadToEnd(); // THIS THROWS AN EXCEPTION
} catch (Exception excep) {
// Exception! Error getting response stream (ReadAsync): ReceiveFailure Value cannot be null.
}
}
Есть ли способ получить тело ответа из 409 Conflict -response, когда сервер возвращает заголовок Transfer-encoding: Chuncked? Если этот заголовок отключен и вместо него возвращается Content-length, все работает нормально, но в этом случае я не могу изменить код сервера.
Та же проблема возникает при попытке использовать RestSharp -library (она возвращает код состояния 0 и тело сообщения 0).
Я использую Mono (для Mac).