How to set timeout for RestClient in Windows Phone 8?

I am calling the Webservice using the RestSharp API. But I ran into the problem that when the server takes longer than the default timeout for RestClient (i.e. 100 seconds), in this case I always get StatusCode = NotFound .I also tried hardcoded the values โ€‹โ€‹of the Timeout and ReadWriteTimeout parameter , but it did not help. Can anyone suggest what can be done here?

My code is below

public async Task<WebDownloadResult> SyncMobileData(string encryptedstring) { WebDownloadResult response = new WebDownloadResult(); var client = new RestClient(BaseUrl + Constants.WEB_SERVICE_NAME); client.Timeout = CONN_TIMEOUT; client.ReadWriteTimeout = CONN_TIMEOUT; var request = new RestRequest(Method.POST); byte[] encryptedbytes=System.Text.Encoding.UTF8.GetBytes(encryptedstring); request.AddParameter("", encryptedbytes, ParameterType.RequestBody); try { response = await client.GetResponseBytesAsync(request); } catch (Exception outer) { response.ErrorOccured = true; response.ErrorMessage = outer.Message; } return response; } 

where CONN_TIMEOUT = 600000 and my response processing class is below:

 public static class RestClientExtensions { private static Task<T> GetResponseFromServer<T>(this RestClient client, IRestRequest request, Func<WebDownloadResult, T> selector) { var tcs = new TaskCompletionSource<T>(); WebDownloadResult webResponse = new WebDownloadResult(); var loginResponse = client.ExecuteAsync(request, r => { if (r.ErrorException == null && r.StatusCode == HttpStatusCode.OK) { webResponse.StatusCode = r.StatusCode; webResponse.StatusCodeNumber = (int)r.StatusCode; webResponse.Result = r.Content; webResponse.ErrorOccured = r.StatusCode == HttpStatusCode.OK ? false : true; tcs.SetResult(selector(webResponse)); } else { tcs.SetException(new Exception(r.StatusCode.ToString())); } }); return tcs.Task; } private static Task<T> GetResponseFromServerForMW<T>(this RestClient client, IRestRequest request, Func<WebDownloadResult, T> selector) { var tcs = new TaskCompletionSource<T>(); WebDownloadResult webResponse = new WebDownloadResult(); var loginResponse = client.ExecuteAsync(request, r => { if (r.ErrorException == null && r.StatusCode == HttpStatusCode.OK) { webResponse.StatusCode = r.StatusCode; if (r.Headers.FirstOrDefault(header => header.Name.Equals("P_RET_SYNC_ID")).Value != null) { webResponse.AdditionalParameter = r.Headers.FirstOrDefault(header => header.Name.Equals("P_RET_SYNC_ID")).Value; } webResponse.StatusCodeNumber = (int)r.StatusCode; webResponse.Result = r.RawBytes; webResponse.ErrorOccured = r.StatusCode == HttpStatusCode.OK ? false : true; tcs.SetResult(selector(webResponse)); } else { tcs.SetException(new Exception(r.StatusCode.ToString())); } }); return tcs.Task; } private static Task<T> GetRawResponseFromServer<T>(this RestClient client, IRestRequest request, Func<WebDownloadResult, T> selector) { var tcs = new TaskCompletionSource<T>(); WebDownloadResult webResponse = new WebDownloadResult(); var loginResponse = client.ExecuteAsync(request, r => { if (r.ErrorException == null && r.StatusCode == HttpStatusCode.OK) { webResponse.StatusCode = r.StatusCode; webResponse.StatusCodeNumber = (int)r.StatusCode; webResponse.Result = r.RawBytes; webResponse.ErrorOccured = r.StatusCode == HttpStatusCode.OK ? false : true; tcs.SetResult(selector(webResponse)); } else { tcs.SetException(new Exception(r.StatusDescription)); } }); return tcs.Task; } public static Task<WebDownloadResult> GetResponseAsync(this RestClient client, IRestRequest request) { return client.GetResponseFromServer(request, r => r); } public static Task<WebDownloadResult> GetResponseAsyncForMW(this RestClient client, IRestRequest request) { return client.GetResponseFromServerForMW(request, r => r); } public static Task<WebDownloadResult> GetResponseBytesAsync(this RestClient client, IRestRequest request) { return client.GetRawResponseFromServer(request, r => r); } } 

and WebDownloadResult :

 public class WebDownloadResult { public HttpStatusCode StatusCode { get; set; } public string ErrorMessage { get; set; } public int StatusCodeNumber { get; set; } public bool ErrorOccured { get; set; } public object Result { get; set; } public object AdditionalParameter { get; set; } } 
+6
source share
1 answer

Maybe your code uses default HttpWebRequest.Timeout

Try passing it to RestRequest explicitly like this:

 request.AddParameter("Timeout", options.Timeout.Value); 

You can try a better version like this one -

 var client = new RestClient(baseUrl) { Timeout = someTimeoutInMilliseconds }; var request = new RestRequest(url) { Method = Method.GET, Timeout = someTimeoutInMilliseconds }; 
0
source

All Articles