web-dev-qa-db-fra.com

RestSharp Timeout ne fonctionne pas

J'ai un client Restsharp et une demande configurée comme ceci:

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);

Cette demande va prendre un certain temps, environ 30 minutes. Maintenant, je sais qu'il existe des moyens plus élégants de le faire, mais, pour cette demande, je dois le faire comme ça.

Ce client RestSharp et cette demande sont exécutés dans le service Windows. Lorsque le service exécute la demande, il lève TimoutException et le délai d'expiration maximal de la demande est d'environ 40 secondes.

Pour une raison quelconque, le délai d'attente que j'ai défini ne fonctionne pas pour ce cas.

Quelqu'un a une solution pour cela?

5
Miljan Vulovic

Vous ne faites peut-être pas ce que vous pensez en définissant la valeur ReadWriteTimeout. Votre valeur est ignorée afin que vous obteniez la valeur par défaut.

Selon cette réponse Quelle est la valeur de délai d’expiration par défaut de RestSharp RestClient? RestSharp utilise HttpWebRequest dans son implémentation.

La propriété de délai d'attente pour HttpWebRequest ne peut pas être négative Propriété HttpWebRequest.Timeout .

Si vous regardez dans le code client RestSharp, vous verrez ceci: 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;
        }
7
Ken Brittain

Comment modifier la durée du délai d'attente par défaut:

pour modifier le délai par défaut en: 5 secondes - par exemple - (5000 millisecondes) 

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

Ça y est, et j'espère que ça aide!

1
BKSpurgeon