Restsharpクライアントがあり、リクエストは次のように設定されています。
var request = new RestRequest();
request.Method = Method.POST;
request.AddParameter("application/json", jsonBody, ParameterType.RequestBody);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
request.Timeout = -1;
request.ReadWriteTimeout = -1;
var url = $"http://{ipAddress}/api/calculate";
var client = new RestClient();
client.BaseUrl = new Uri(url);
client.Timeout = -1;
client.ReadWriteTimeout = -1;
var response = client.Execute(request);
このリクエストは終了するまでに約30分かかります。これを行うにはよりエレガントな方法があることを知っていますが、このリクエストでは、このようにする必要があります。
このRestSharpクライアントとリクエストは、Windowsサービス内で実行されます。サービスがリクエストを実行すると、TimoutExceptionがスローされ、リクエストの最大タイムアウトは約40秒です。
なんらかの理由で、私が設定したタイムアウトはこのケースでは機能しません。
誰かがこれに対する解決策を持っていますか?
ReadWriteTimeout
の値を設定しても、思い通りの結果が得られない可能性があります。値は無視されるため、デフォルトが取得されます。
この回答によると RestSharp RestClientのデフォルトのタイムアウト値は何ですか? RestSharpはその実装でHttpWebRequest
を使用します。
HttpWebRequest
のタイムアウトプロパティは負にできません HttpWebRequest.Timeout Property 。
RestSharpクライアントコードを見ると、次のように表示されます。 https://github.com/restsharp/RestSharp/blob/70de357b0b9dfc3926c95d1e69967c7a7cbe874c/RestSharp/RestClient.cs#L452
int readWriteTimeout = request.ReadWriteTimeout > 0
? request.ReadWriteTimeout
: this.ReadWriteTimeout;
if (readWriteTimeout > 0)
{
http.ReadWriteTimeout = readWriteTimeout;
}
デフォルトのタイムアウトを次のように変更します:5秒-たとえば-(つまり5000ミリ秒):
var client = new RestClient(BaseUrl);
client.Timeout = 5000; // 5000 milliseconds == 5 seconds
それで終わりです。お役に立てば幸いです。
RestSharp v106.2.2に更新します。
参照 https://github.com/restsharp/RestSharp/issues/109