我正在尝试控制HttpListener
中单个连接的最大总持续时间。我知道TimeoutManager
属性和它包含的5个左右不同的超时值,但不清楚是否设置这些值中的每一个都会累加到连接中可能发生延迟的总位置。
我正在寻找更多的内容:“如果从打开连接的那一刻起到现在为止,连接的持续时间超过xs,则中止它而不发送任何其他内容或等待其他任何内容。”
修改
为了澄清,我正在尝试的方案涉及服务器尝试发送响应而客户端未接收。这会导致HttpListenerResponse.OutputStream.Write()
无限期挂起。我试图找到一个方法,我可以从另一个线程调用,以强制中止连接。我尝试使用OutputStream.Close()
并获得Cannot Close Stream until all bytes are written
。我也尝试了HttpListenerResponse.Abort()
,但没有产生明显效果。
答案 0 :(得分:3)
这些属性都不会做你想要的。 HttpListener旨在控制请求流,输入和传出数据,因此它不处理完全接收响应和发送响应之间的时间,这是您负责处理它的责任。
如果总时间高于期望的时间,您应该创建自己的机制来中止请求,只有一个计时器就足够了,当创建一个新连接时,将一个计时器以总超时作为到期时间排队,如果请求在计时器到期之前结束取消计时器,否则计时器中止请求。