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 标志等,您可能能够刷新流数据。