我正在寫在HTTP上使用持久連接的應用程序 - 也就是說,Web服務器從來沒有「完成」寫入響應流,並在客戶端應用程序,因爲它涉及從響應流中讀取數據HttpWebRequest AllowReadStreamBuffering屬性在蜂窩網絡上不符合?
我寫了一些.NET 3.5桌面/ winforms應用程序來確認服務器&客戶端代碼的工作原理,然後編寫了一個Windows Phone應用程序來做同樣的事情。桌面/電話代碼之間唯一的區別是我在電話上將AllowReadStreamBuffering屬性設置爲false。
昨晚電話應用程序工作,但今天它不工作 - 當試圖讀取響應流時,它掛起,直到從服務器端關閉連接 - 這意味着AllowReadStreamBuffering設置不被HttpWebRequest 。
昨晚和現在的區別在於,昨天晚上,我在wifi上,而今天我通過手機連接。
我的假設是,在手機上,HttpWebRequest只在連接是WiFi(也許是以太網)時纔會承認AllowReadStreamBuffering = false,但在使用蜂窩網絡時忽略它並緩衝。
因此,HttpWebRequest在通過蜂窩連接時強制讀取流緩衝是真的嗎?我一直沒能找到證實這種行爲的任何文件,所以我想知道是否有其他人經歷過這種情況。我稍後可以對此進行更徹底的測試,但現在我想我會問這個問題。
UPDATE 12年5月11日
測試,並回答了我自己的問題(見下文)
我的服務器每秒發送1個字節,並且客戶端在服務器關閉流之前不會通過蜂窩打開響應流。這並不意味着在BeginGetResponse觸發之前可能收到的最小數據大小? – PhilChuang
服務器可能無法正常刷新,或者應該啓用分塊傳輸以獲得更多「適當的」長期連接支持。 – Arktronic
我會嘗試服務器端的變化,但事實上,該應用程序通過WiFi工作,但不是蜂窩使我認爲這是一個.NET框架問題。 – PhilChuang