web-dev-qa-db-ja.com

RestSharpタイムアウトが機能しない

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秒です。

なんらかの理由で、私が設定したタイムアウトはこのケースでは機能しません。

誰かがこれに対する解決策を持っていますか?

10
Miljan Vulovic

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;
        }
14
Ken Brittain

デフォルトのタイムアウト期間の長さを変更する方法:

デフォルトのタイムアウトを次のように変更します:5秒-たとえば-(つまり5000ミリ秒):

    var client = new RestClient(BaseUrl);
    client.Timeout = 5000; // 5000 milliseconds == 5 seconds

それで終わりです。お役に立てば幸いです。

7
BKSpurgeon

RestSharp v106.2.2に更新します。
参照 https://github.com/restsharp/RestSharp/issues/109

0
Rami A.