2017-10-05 139 views
0

我有一個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秒。

出於某種原因,我設置的超時不適用於這種情況。

有人有這方面的解決方案?

回答

1

您可能不會通過設置ReadWriteTimeout值來做你認爲你的想法。你的價值被忽略,所以你得到了默認值。

根據此回答What is default timeout value of 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; 
     } 
+0

謝謝你的答案。那麼,你有什麼建議我做無限的時間超時? –

+1

首先,我會將操作分解爲開始,狀態和結果操作。撥打電話,返回一個令牌,然後檢查狀態。最後,獲取保存的結果。如果這是不可行的,那麼我會建議儘可能長時間超時,並希望最好。如果你控制API,那就去找門#1後面的東西。 –

+0

你說得對。在官方文檔中,有一個-1表示無限制超時。我把它像Int32.MaxValue和工作。謝謝你,小夥伴! –