超时设置似乎没有效果

时间:2016-05-21 05:58:21

标签: c# .net timeout servicestack

我正在尝试为特殊请求设置超时,这需要很长时间才能处理。因此,我试图设置超时,如下所示:

client.RequestFilter = r => {
    r.Timeout = 1000000;
    r.ReadWriteTimeout = 1000000;
}

然而,这些设置似乎没有效果;请求在大约30秒内仍然超时。我可以用一些黑客来正确设置超时吗?

ETA:我收到的回复是一个流;我是这样做的:

var stream = client.Send<Stream>(requestDto);

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

ServiceStack的服务客户端只是HttpWebRequest的包装器,因此您的代码最终会直接设置HttpWebRequest TimeoutReadWriteTimeout属性。

请求过滤器使您可以直接访问所使用的HttpWebRequest实例,并设置Timeout属性应按预期工作。除此之外,唯一可以修改.NET的HttpWebRequest行为的类是System.Net.ServicePointManager,它允许您配置一些属性,如DefaultConnectionLimitDnsRefreshTimeout等。但是有&#39;没有额外的请求超时属性。

您可以尝试的替代解决方案是使用ServiceStack JsonHttpClient,因为它建立在Microsoft的新HttpClient库上,您可能会更好运它。虽然建议使用Async API,因为Sync API只是阻止了HttpClient的底层Async API。

对于API调用本身,您应该在using块中访问流,例如:

using (var stream = client.Send<Stream>(requestDto))
{
}