2012-05-10 44 views
0

我正在寫在HTTP上使用持久連接的應用程序 - 也就是說,Web服務器從來沒有「完成」寫入響應流,並在客戶端應用程序,因爲它涉及從響應流中讀取數據HttpWebRequest AllowReadStreamBuffering屬性在蜂窩網絡上不符合?

我寫了一些.NET 3.5桌面/ winforms應用程序來確認服務器&客戶端代碼的工作原理,然後編寫了一個Windows Phone應用程序來做同樣的事情。桌面/電話代碼之間唯一的區別是我在電話上將AllowReadStreamBuffering屬性設置爲false。

昨晚電話應用程序工作,但今天它不工作 - 當試圖讀取響應流時,它掛起,直到從服務器端關閉連接 - 這意味着AllowReadStreamBuffering設置不被HttpWebRequest 。

昨晚和現在的區別在於,昨天晚上,我在wifi上,而今天我通過手機連接。

我的假設是,在手機上,HttpWebRequest只在連接是WiFi(也許是以太網)時纔會承認AllowReadStreamBuffering = false,但在使用蜂窩網絡時忽略它並緩衝。

因此,HttpWebRequest在通過蜂窩連接時強制讀取流緩衝是真的嗎?我一直沒能找到證實這種行爲的任何文件,所以我想知道是否有其他人經歷過這種情況。我稍後可以對此進行更徹底的測試,但現在我想我會問這個問題。

UPDATE 12年5月11日
測試,並回答了我自己的問題(見下文)

回答

0

我驗證了我的WP7應用程序不會最初讀取通過蜂窩連接時未緩衝的響應流 - 它只在以太網或WiFi上時纔會這樣做。

因此,我修改了我的服務器httphandler,以在連接開始時向響應流寫入初始塊數據(8k)。這樣做使得應用程序立即在蜂窩上讀取響應流,就像它在wifi上時一樣。在忽略了最初的數據爆炸之後,應用程序就可以實時處理單個字節了。

我能想到的唯一結論是,當通過蜂窩連接時,HttpWebRequest最初需要緩衝少量數據,然後才允許緩衝讀取流。

0

AllowReadStreamBuffering =假榮幸蜂窩連接;否則(例如)音頻流應用程序將無法正常工作。

+0

我的服務器每秒發送1個字節,並且客戶端在服務器關閉流之前不會通過蜂窩打開響應流。這並不意味着在BeginGetResponse觸發之前可能收到的最小數據大小? – PhilChuang

+0

服務器可能無法正常刷新,或者應該啓用分塊傳輸以獲得更多「適當的」長期連接支持。 – Arktronic

+0

我會嘗試服務器端的變化,但事實上,該應用程序通過WiFi工作,但不是蜂窩使我認爲這是一個.NET框架問題。 – PhilChuang