我正在尝试控制 HttpListener
中单个连接的最大总持续时间。我知道 TimeoutManager
属性和它包含的 5 个左右不同的超时值,但不清楚设置这些值中的每一个是否会加起来导致延迟可能发生的总位置联系。
我正在寻找更多类似的东西:“如果我们有一个连接从打开连接到现在持续时间超过 x 秒,则中止它而不发送任何其他内容或等待任何其他内容。”
编辑
澄清一下,我正在试验的场景涉及服务器尝试发送响应而客户端没有收到。这会导致 HttpListenerResponse.OutputStream.Write()
无限期挂起。我试图找到一种可以从另一个线程调用的方法来硬中止连接。我尝试使用 OutputStream.Close()
并得到了 Cannot Close Stream until all bytes are written
。我还尝试了 HttpListenerResponse.Abort()
,但没有产生明显的效果。
最佳答案
这些属性都不会满足您的要求。 HttpListener 旨在控制请求流、传入和传出数据,因此它不会处理从完全收到响应到您发送响应之间的时间,您有责任处理它。
如果总时间比期望的时间长,你应该创建自己的机制来中止请求,只需要一个计时器就足够了,当创建一个新连接时,如果请求在定时器到期前结束取消定时器,否则定时器中止请求。
关于c# - HttpListener 设置总连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32280959/