この記事は、 HttpWebRequest
クラスを使用して HTTP POST または PUT 要求に大量のデータを送信するときに発生する問題を解決するのに役立ちます。
元の製品バージョン: .NET Framework 4.5
元の KB 番号: 2855735
症状
HttpWebRequest
クラスを使用して HTTP POST または PUT 要求に対して大量のデータを送信すると、Microsoft .NET Framework を実行しているコンピューターで要求が失敗する可能性があります。 さらに、メモリ不足の例外が発生する場合があります。
HttpWebRequest
クラスを使用するアプリケーションが大量のメモリを消費していることに気付くかもしれません。 パフォーマンス モニターを使用してHttpWebRequest
クラスを使用するアプリケーションを監視すると、データの送信時にプライベート バイト数が増加し続けます。
原因
この問題は、 HttpWebRequest
クラスを使用すると、.NET Framework によって既定で送信データがバッファーされるために発生します。
HttpWebRequest クラスを使用して大量のデータを送信すると、POST または PUT 要求が失敗し 元の問題が文書化されます。
解決策
この問題を回避するには、 HttpWebRequest.AllowWriteStreamBuffering
プロパティを false に設定します。 これにより、POST または PUT 要求の送信データ (エンティティ本文) がメモリにバッファーされません。
4.5 より前のバージョンの .NET Framework では、 HttpWebRequest.AllowWriteStreamBuffering
プロパティを false に設定すると、認証されたエンドポイントにデータをアップロードするときにエラーが発生することがあります。 たとえば、この要求が成功するにはデータのバッファリングが必要ですメッセージが表示されたSystem.Net.WebException
が発生する場合があります。 ただし、より詳細な調査では、例外に関連付けられている応答は実際には System.Net.HttpStatusCode.Unauthorized
(401) の状態コードを示します。
HTTPWebRequest クラスを使用して大量のデータを送信すると、POST または PUT 要求が失敗します 401 応答を処理するための事前認証と KeepAlive 接続の回避策について説明します。
.NET Framework 1.1、2.0、3.0、3.5、4.0 とは異なり、.NET Framework 4.5 では、 HttpWebRequest.AllowWriteStreamBuffering
プロパティの新しいデザイン機能が追加されます。 新しい機能は、 Expect100Continue
機能が有効になっている限り、認証シナリオを直接処理できます。 既定の ServicePointManager.Expect100Continue
値は true です。