RestSharp Timeout funktioniert nicht
Ich habe eine restsharp client und die Anfrage wie folgt eingerichtet:
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);
Diese Anforderung wird eine Weile dauern zu beenden, etwa 30 Minuten. Nun, ich weiß, dass es elegantere Wege, dies zu tun, aber, für diese Anfrage, ich muss es so machen.
Diese RestSharp client und die Anfrage ausgeführt, im inneren Windows-Dienst. Wenn der service ausgeführt wird verlangen, es wirft TimoutException und verlangen maximale Zeitlimit beträgt rund 40 Sekunden.
Aus irgendeinem Grund, timeout, die ich eingestellt habe, funktioniert nicht für diesen Fall.
Jemand hat eine Lösung dafür?
Antrag sollte nicht 30 Minuten dauern - sollten Sie überarbeiten Sie Ihre Architektur-und tun Sie es mit einigen async-Methode.
InformationsquelleAutor Miljan Vulovic | 2017-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht tun, was Sie denken, dass Ihr durch die Einstellung der
ReadWriteTimeout
Wert. Ihr Wert wird ignoriert, so dass Sie get die default.Nach dieser Antwort Was ist die Standard-timeout-Wert von RestSharp RestClient? RestSharp verwendet
HttpWebRequest
in der Umsetzung.Die timeout-Eigenschaft für
HttpWebRequest
darf nicht negativ sein HttpWebRequest.Timeout-Eigenschaft.Wenn man sich in der RestSharp client-code, den Sie sehen: https://github.com/restsharp/RestSharp/blob/70de357b0b9dfc3926c95d1e69967c7a7cbe874c/RestSharp/RestClient.cs#L452
Erste, ich würde brechen Sie den Vorgang mit dem start -, status-und Folge-Operationen. Aufrufen, kehren Sie ein token und dann auf status prüfen. Schließlich erhalten Sie das gespeicherte Ergebnis. Wenn dies nicht möglich ist, dann würde ich empfehlen, die timeout-so lange wie Sie können und das beste hoffen. Wenn Sie die API-dann gehen Sie für das, was hinter der Tür #1.
Sie hatten Recht. In der offiziellen Dokumentation gibt es ein " -1 " für unbegrenzt timeout. Ich habe es wie Int32.MaxValue-und das funktionierte. Danke mate!
InformationsquelleAutor Ken Brittain
Wie ändern, um die default-Timeout-Zeitraum Länge:
ändern, um die Standard-Zeit: 5 Sekunden - zum Beispiel - (z.B. 5000 Millisekunden):
Das ist es, und ich hoffe, das hilft!
InformationsquelleAutor BKSpurgeon