HttpListener提供了响应流,但调用flush没有任何作用(从源代码中可以看出,因为它实际上什么都没做)。深入研究HTTP API后发现这是HttpListener本身的限制。
有人知道如何刷新HttpListener的响应流吗(可能需要使用反射或额外的P/Invokes)?
更新:如果没有刷新选项或定义缓冲区大小的能力,则无法http流式传输任何内容。
HttpListener提供了响应流,但调用flush没有任何作用(从源代码中可以看出,因为它实际上什么都没做)。深入研究HTTP API后发现这是HttpListener本身的限制。
有人知道如何刷新HttpListener的响应流吗(可能需要使用反射或额外的P/Invokes)?
更新:如果没有刷新选项或定义缓冲区大小的能力,则无法http流式传输任何内容。
仅当Transfer-Encoding设置为Chuncked时,Flush才适用于System.Net命名空间中的大多数情况,否则整个请求将被返回,Flush实际上没有任何作用。这是我在使用HttpWebResponse时所经历的。
我还没有尝试过,但是写一个单独的TCP服务器来流式响应如何?然后将请求从HttpListener转发到“内部”tcp服务器。使用此重定向,您可能可以根据需要返回流数据。
至于刷新它,我唯一看到的方法是模拟处理,而不实际处理。如果您可以入侵HttpResponseStream对象,请告诉它处理,取消设置m_Closed标志等,您可能可以刷新流数据。