Owin自托管WebApi超时设置

时间:2015-11-13 14:59:14

标签: c# timeout asp.net-web-api owin

我有一个Owin自托管的web-api服务器,我想知道在有大量文件下载时是否需要更改超时设置? 我使用的客户端使用HttpCompletionOption.ResponseHeadersRead读取响应。

在调试期间,在断点停止了一段时间后,我在客户端尝试从接收的流中读取时遇到异常:

无法从传输连接中读取数据:远程主机强行关闭现有连接。

调试时我可以重现这个问题。在返回到服务器的Get-Request之后,在断点处等待大约30秒后发生。

这是由于某种空闲超时,因为我保留了一个断点而不能处理收到的流吗?或者当我的收集速度很慢且需要太长时间从流中读取时,它是否也会发生?

1 个答案:

答案 0 :(得分:2)

非常古老的问题,但可能会帮助谁碰到同一堵墙。 流媒体内容遇到了同样的问题,并在HTTPERR文件夹(C:\Windows\System32\LogFiles\HTTPERR)

中找到了初步线索
 2016-08-12 09:17:52 ::1%0 60095 ::1%0 8000 HTTP/1.1 GET 
 /endpoint/audiostream/0/0/streamer.mp3 - - - Timer_MinBytesPerSecond -

 2016-08-12 09:18:19 ::1%0 60118 ::1%0 8000 HTTP/1.1 GET 
 /endpoint/audiostream/0/0/streamer.mp3 - - - Request_Cancelled -

Owin HttpListener具有TimeOutManager属性,可让您更改大多数超时/限制。我发现获取webapp HttpListener实例的唯一方法是访问其属性

var listener = (OwinHttpListener);
app.Properties["Microsoft.Owin.Host.HttpListener.OwinHttpListener" ]);
listener.Listener.TimeoutManager.MinSendBytesPerSecond = uint.MaxValue;

根据owin代码库,uint.MaxValue MinSendBytesPerSecond只会禁用该标记。