Tôi đã thử tất cả mọi thứ và tôi không thể tìm ra lý do tại sao lỗi này xảy ra.Bizzare HttpWebResponse Lỗi: ServerProtocolViolation
Bối cảnh: Tôi có một ứng dụng IPad, được viết bằng MonoTouch và tôi có một luồng chạy ngầm và cứ sau 15 giây tôi đồng bộ dữ liệu với máy chủ. Điều này làm việc một vài lần lặp đầu tiên của luồng, nhưng cuối cùng tôi nhận được dấu vết ngăn xếp sau đây.
An exception occured: System.Net.WebException: Error getting response stream (ReadDone4): ServerProtocolViolation ---> System.FormatException: Input string was not in the correct format
at System.UInt32.Parse (System.String s) [0x00010] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System/UInt32.cs:405
at System.Net.WebConnection.GetResponse (System.Byte[] buffer, Int32 max) [0x000ba] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebConnection.cs:565
at System.Net.WebConnection.ReadDone (IAsyncResult result) [0x00095] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebConnection.cs:446
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x0005e] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:819
at System.Net.HttpWebRequest.GetResponse() [0x0000e] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:827
at SyncService.REST.RestClient.Execute[IEnumerable`1] (SyncService.REST.RestRequest request) [0x00079] in /Users/Chris/Compass/SyncService/REST/RestClient.cs:42
Tôi đang nói chuyện với một IIS webserver với cấu hình mặc định. Đây là phương pháp tôi đang gọi:
public RestResponse<T> Execute<T>(RestRequest request){
var restResponse = new RestResponse<T>();
var serializer = new JavaScriptSerializer();
var urlPath = _baseUrl + "/" + request.Resource;
var httpRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlPath));
httpRequest.Headers = request.Headers;
Authenticator.Authenticate(httpRequest);
httpRequest.Method = request.Method.ToString();
if (request.Method == Method.POST)
SetPostData(httpRequest, request);
HttpWebResponse httpResponse = null;
try{
httpResponse = (HttpWebResponse) httpRequest.GetResponse();
var reader = new StreamReader(httpResponse.GetResponseStream());
var responseString = reader.ReadToEnd();
reader.Close();
restResponse.StatusCode = httpResponse.StatusCode;
restResponse.Headers = httpResponse.Headers;
restResponse.Data = serializer.Deserialize<T>(responseString);
restResponse.ResponseStatus = ResponseStatus.Completed;
}
catch(WebException e){
restResponse.ResponseStatus = ResponseStatus.Error;
restResponse.ErrorMessage = e.Message;
restResponse.ErrorException = e;
var webResponse = (HttpWebResponse) e.Response;
if (webResponse != null){
restResponse.StatusCode = webResponse.StatusCode;
restResponse.Headers = webResponse.Headers;
}
if (restResponse.StatusCode != HttpStatusCode.NotModified)
Console.WriteLine("An exception occured: " + e + "\r\n");
}catch (Exception ex) {
restResponse.ResponseStatus = ResponseStatus.Error;
restResponse.ErrorMessage = ex.Message;
restResponse.ErrorException = ex;
}
if (httpResponse != null)
httpResponse.Close();
return restResponse;
}
Xin vui lòng trợ giúp. Tôi không biết phải làm gì. Google không hiển thị gì.
Tôi có thể thực hiện 22 yêu cầu thành công trước khi lỗi xuất hiện.
EDIT Tôi đã thu hẹp nó xuống dưới dạng sự cố máy chủ. Đây là asp.net MVC và ngoại lệ chỉ xảy ra khi tôi gửi 304 cho khách hàng. Xem server Code:
private void ServeHttpStatusCode() {
Response.StatusCode = 304;
Response.Status = "304 Not Modified";
Response.StatusDescription = "The resource you are requesting has not been modified";
Response.ContentType = "application/json";
Response.Write("{\"Error\":\"The resource you are requesting has not been modified\"}");
Response.End();
Response.Close();
}
Điều đó có nghĩa là máy chủ không hoạt động độc đáo :) Bạn có thể sử dụng trình thám thính HTTP như Fiddler hoặc Ethereal để xem phản hồi thô không? – Skurmedel
Làm việc 22 lần rồi dừng lại. Nếu tôi giết ứng dụng của tôi và bắt đầu lại ... tất cả đều tốt cho 22 yêu cầu khác. Bạn vẫn nghĩ rằng nó trên máy chủ? –
Xem Chỉnh sửa ở trên. –