我正在尝试为特殊请求设置超时,这将需要很长时间来处理。因此,我正在尝试设置超时,如下所示:
client.RequestFilter = r => {
r.Timeout = 1000000;
r.ReadWriteTimeout = 1000000;
}
但是,这些设置似乎不起作用;请求在大约 30 秒后仍超时。我可以使用一些技巧来正确设置超时吗?
ETA:我收到的响应是流;我是这样做的:
var stream = client.Send<Stream>(requestDto);
有没有更好的方法?
ServiceStack的服务客户端只是HttpWebRequest的包装器,因此您的代码最终会直接设置HttpWebRequest
超时和ReadWriteTimeout属性。
请求筛选器允许您直接访问所使用的HttpWebRequest
实例,并且设置 Timeout 属性应按预期工作。除此之外,唯一可以修改 行为的类。NET的HttpWebRequest是System.Net.ServicePointManager
,它允许您配置一些属性,如DefaultConnectionLimit
和DnsRefreshTimeout
等。但是没有其他请求超时属性。
您可以尝试的替代解决方案是使用ServiceStack的JsonHttpClient,因为它建立在Microsoft较新的HttpClient
库之上,因此您可能会有更好的运气。尽管建议使用异步API,因为同步API只是阻止了HttpClient的底层异步API。
对于 API 调用本身,您应该在 using 块中访问流,例如:
using (var stream = client.Send<Stream>(requestDto))
{
}