2009-04-27 57 views
6

HttpListener给你响应流,但调用flush意味着什么都没有(并且来源很清楚,因为它实际上什么都不做)。挖掘HTTP API内部显示这是HttpListener本身的限制。如何刷新HttpListener响应流?

任何人都知道如何刷新HttpListener的响应流(可能与反射或额外的P /调用)?

更新:如果您没有flush选项或者没有定义缓冲区大小的功能,则不能http流。

回答

2

当Transfer-Encoding设置为Chuncked时,Flush仅适用于大部分System.Net命名空间,否则返回整个请求并且Flush确实不起作用。至少这是我在使用HttpWebResponse时所经历的。

+0

问题不是为什么它不起作用......但想象一下HTTP流,尽快发送一些东西很重要。分块数据根本就不是一个选项。 HttpListener在完成请求之前实际发送了一些东西,但它使用了非常大的不可配置的缓冲区。 – Mash 2009-04-27 16:21:23

+0

顺便说一下,当你问这个问题时,ASP.NET会刷新... ASP.NET在获取完整的POST主体之前需要一些黑客来获取InputStream内容,但是OutputStream工作正常。 – Mash 2009-04-27 16:23:39

0

我还没有尝试过,但如何编写一个单独的TCP服务器流式响应?然后将请求从HttpListener转发到“内部”tcp服务器。使用此重定向,您可能可以根据需要将数据流式传回。

至于冲洗它们,他们只有我看到做的是模拟配置,而没有实际配置。如果你可以入侵HttpResponseStream对象,告诉它处理,取消设置m_Closed标志等,你可能会刷新流数据。