狀況
當 HTTP POST 傳送大量資料的情況下,您在使用Ht的tpWebRequest類別,或將要求,要求可能會失敗正在執行 Microsoft.NET Framework 的電腦上。此外,您可能會收到記憶體不足例外狀況。
您可能會發現使用HttpWebRequest類別的應用程式會耗用許多記憶體。當您使用效能監視器監視使用HttpWebRequest類別的應用程式時,私用位元組計數會繼續增加送出資料。
原因
因為.NET Framework 緩衝處理輸出的資料依預設使用HttpWebRequest類別時,就會發生這個問題。KB 文章的文件原始的問題。
解決方案
若要解決這個問題,請設定 [ HttpWebRequest.AllowWriteStreamBuffering ] 屬性設為 false。透過這種方式,輸出的資料 (實體主體) 的文章或 PUT 要求不會緩衝記憶體中。
在早於 4.5 Microsoft.NET Framework 版本中,HttpWebRequest.AllowWriteStreamBuffering 屬性設定為 false 會有時導致錯誤時將資料上載至已驗證的端點。例如,您可能會遇到與 「 此要求需要資料緩衝,成功 」 訊息的 System.Net.WebException。但是在深入查看例外狀況相關聯的回應實際上會指出 System.Net.HttpStatusCode.Unauthorized (401) 狀態碼。KB 文章的文件預先驗證和處理 401 回應 KeepAlive 連線因應的措施。
與 Microsoft.NET Framework 1.1、 2.0、 3.0、 3.5 和 4.0,不同的是 Microsoft.NET Framework 4.5 會新增新的設計功能, HttpWebRequest.AllowWriteStreamBuffering屬性。新的功能可以直接處理驗證案例中,只要啟用 Expect100Continue 功能。預設的ServicePointManager.Expect100Continue值為true。
更多的資訊
如需有關 Microsoft.NET Framework 1.1、 2.0、 3.0、 3.5 和 4.0 為基礎的HttpWebRequest.AllowWriteStreamBuffering方案的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件︰
A 張貼或放入要求可能會失敗時正在執行.NET Framework 的電腦上傳送大量資料的情況下,您在使用 HttpWebRequest 類別
如需HttpWebRequest.AllowWriteStreamBuffering屬性的詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站︰
如需ServicePointManager.Expect100Continue屬性的詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站︰