私はRestSharp APIを使用してWebサービスを呼び出していますが、サーバーがRestClientのデフォルトタイムアウト(つまり100秒)よりも時間がかかる場合、常に取得しています。StatusCode = NotFoundハードコードにはTimeoutとReadWriteTimeoutの両方のパラメータ値がありますが、それは役に立ちませんでした。誰かがここで何ができるのかを提案できますか?Windows Phone 8でRestClientのタイムアウトを設定するにはどうすればよいですか?
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);
}
}
とWebDownloadResult以下の通りです:
マイコードはCONN_TIMEOUT = 600000と私の応答処理クラスは以下の通りです
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;
}
は以下の通りである
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; }
}
をあなたはCONN_TIMEOUT = 600000がどのように意味理解しています多くの時間は? StatusCode = NotFoundを意味する404 HTTPサーバーエラー –
CONN_TIMEOUT = 600000を追加しなかったのは10分です。最初は20秒、30秒などで開始しました。サーバーがいくつかの操作を実行するには時間がかかります応答を送ってください。そして、デフォルトのタイムアウトである100秒以上の時間がかかるので、NotFoundエラーが発生しています。他のWebサービスでは完全に動作します。 –
@Romaszここでお手伝いできますか? –