2009-04-27 56 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標誌等,你可能會刷新流數據。