से शुरू होता है मेरे पास एक पृष्ठभूमि कार्यकर्ता धागा है जो लगातार दूरस्थ सर्वर से डेटा को समन्वयित कर रहा है। जब मैं पहली बार ऐप चलाता हूं, तो सबकुछ ठीक काम करता प्रतीत होता है। यह हर 30 सेकंड के बारे में वेब अनुरोध करता है और डेटा सफलतापूर्वक लौटाता है।HTTPWebRequest और थोड़ी देर के बाद, 400 (खराब अनुरोध)
यदि मैं लंबे समय तक सिम्युलेटर चल रहा हूं, तो अंततः अनुरोध (400) खराब अनुरोध के साथ विफल हो जाएगा। और बाद के सभी अनुरोध एक ही काम करते हैं। अगर मैं ऐप को मारता हूं और इसे पुनरारंभ करता हूं ... सब ठीक है।
किसी के पास कोई विचार है? कोड नीचे है।
public RestResponse<T> Execute<T>(RestRequest request) {
var restResponse = new RestResponse<T>();
var serializer = new JavaScriptSerializer();
var urlPath = baseUrl + "/" + request.Resource;
Console.WriteLine("Requesting: " + urlPath);
var httpRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlPath));
httpRequest.Headers = request.Headers;
foreach (string key in clientHeaders.Keys)
httpRequest.Headers.Add(key, clientHeaders[key]);
httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate");
Authenticator.Authenticate(httpRequest);
httpRequest.Method = request.Method.ToString();
HttpWebResponse httpResponse = null;
try {
if ((request.Method == Method.POST) && (!request.IsJsonPost))
SetPostData(httpRequest, request);
if ((request.Method == Method.POST) && (request.IsJsonPost)){
SetJsonPostData(httpRequest, request);
}
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
var reader = new StreamReader(GetStreamForResponse(httpResponse));
var responseString = reader.ReadToEnd();
Console.WriteLine(responseString);
reader.Close();
restResponse.StatusCode = httpResponse.StatusCode;
restResponse.Headers = httpResponse.Headers;
restResponse.Data = serializer.Deserialize<T>(responseString);
restResponse.ResponseStatus = ResponseStatus.Completed;
httpResponse.Close();
} 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:\r\n " + request.Resource + "\r\n" + e + "\r\n");
} catch (Exception ex) {
restResponse.ResponseStatus = ResponseStatus.Error;
restResponse.ErrorMessage = ex.Message;
restResponse.ErrorException = ex;
}
if (httpResponse != null)
httpResponse.Close();
return restResponse;
}
यह इस लाइन पर विफल रहता है:
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
स्टैक ट्रेस:
System.Net.WebException: The remote server returned an error: (400) Bad Request.
at System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult result) [0x002f2] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1477
at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00141] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1300
अनुरोध कभी नहीं दूरस्थ सर्वर से हो रही है।
** 400 ** सर्वर से आता है। यह सहायक होगा यदि आप एक स्निफर (उदाहरण के लिए वायरशर्क) चला सकते हैं और पता लगा सकते हैं कि उस मामले में क्या प्रसारित किया गया था (और उससे पहले की सामान्य प्रतिक्रिया से इसकी तुलना करें)। – poupou
यह अजीब चीज है, यह सर्वर से नहीं आ रही है। आईआईएस कभी भी अनुरोध नहीं देखता है। –
बहुत अजीब - लेकिन एक अच्छा सुराग! – poupou