【发布时间】:2017-10-05 11:08:46
【问题描述】:
我有一个 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 秒。
由于某种原因,我设置的超时不适用于这种情况。
有人有解决办法吗?
【问题讨论】:
-
请求不应该花费 30 分钟 - 你应该重新设计你的架构并使用一些异步方法。
-
我同意@JaroslavŠtreit。如果处理已经完成,则可能更适合返回“201 - 已接受”响应此请求,并指示客户端调用程序应用程序在另一个端点/url 中再次检查。这样,客户端应用程序就不需要被阻塞等待长时间的操作完成。
标签: c# .net windows-services timeout restsharp