我正在尝试为特殊请求设置超时,这需要很长时间才能处理。因此,我试图设置超时,如下所示:
client.RequestFilter = r => {
r.Timeout = 1000000;
r.ReadWriteTimeout = 1000000;
}
然而,这些设置似乎没有效果;请求在大约30秒内仍然超时。我可以用一些黑客来正确设置超时吗?
ETA:我收到的回复是一个流;我是这样做的:
var stream = client.Send<Stream>(requestDto);
有更好的方法吗?
答案 0 :(得分:1)
ServiceStack的服务客户端只是HttpWebRequest的包装器,因此您的代码最终会直接设置HttpWebRequest
Timeout和ReadWriteTimeout属性。
请求过滤器使您可以直接访问所使用的HttpWebRequest
实例,并设置Timeout属性应按预期工作。除此之外,唯一可以修改.NET的HttpWebRequest行为的类是System.Net.ServicePointManager
,它允许您配置一些属性,如DefaultConnectionLimit
和DnsRefreshTimeout
等。但是有&#39;没有额外的请求超时属性。
您可以尝试的替代解决方案是使用ServiceStack JsonHttpClient,因为它建立在Microsoft的新HttpClient
库上,您可能会更好运它。虽然建议使用Async API,因为Sync API只是阻止了HttpClient的底层Async API。
对于API调用本身,您应该在using块中访问流,例如:
using (var stream = client.Send<Stream>(requestDto))
{
}