Ich habe einen Restsharp-Client und eine 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 Anfrage wird eine Weile dauern, etwa 30 Minuten. Nun, ich weiß, dass es elegantere Wege gibt, dies zu tun, aber für diese Anfrage muss ich es so machen.
Dieser RestSharp-Client und diese Anforderung werden innerhalb des Windows-Diensts ausgeführt. Wenn der Dienst die Anforderung ausführt, wird TimoutException ausgelöst und das maximale Zeitlimit für die Anforderung beträgt etwa 40 Sekunden.
Aus irgendeinem Grund funktioniert das von mir eingestellte Timeout für diesen Fall nicht.
Hat jemand eine Lösung dafür?
Möglicherweise tun Sie nicht das, was Sie Ihrer Meinung nach tun, indem Sie den Wert ReadWriteTimeout
einstellen. Ihr Wert wird ignoriert, damit Sie den Standardwert erhalten.
Entsprechend dieser Antwort Was ist der Standardwert für das Zeitlimit von RestSharp RestClient? RestSharp verwendet HttpWebRequest
in seiner Implementierung.
Die Timeout-Eigenschaft für HttpWebRequest
darf nicht negativ sein HttpWebRequest.Timeout-Eigenschaft .
Wenn Sie in den RestSharp-Clientcode schauen, sehen Sie Folgendes: 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;
}
so ändern Sie das Standard-Timeout auf: 5 Sekunden (z. B. 5000 Millisekunden):
var client = new RestClient(BaseUrl);
client.Timeout = 5000; // 5000 milliseconds == 5 seconds
Das ist es und ich hoffe das hilft!