http を介した永続的な接続を使用するアプリを作成しています。つまり、Web サーバーは応答ストリームへの書き込みを「終了」せず、クライアント アプリは応答ストリームからデータを読み取ります。
サーバーとクライアントのコードが機能することを確認するために、いくつかの .NET 3.5 デスクトップ/winforms アプリを作成してから、同じことを行う Windows Phone アプリを作成しました。デスクトップ コードと電話コードの唯一の違いは、電話で AllowReadStreamBuffering プロパティを false に設定したことです。
電話アプリは昨夜は機能しましたが、今日は機能しません。応答ストリームを読み取ろうとすると、接続がサーバー側から閉じられるまでハングします。これは、AllowReadStreamBuffering 設定が HttpWebRequest によって受け入れられていないことを意味します。
昨夜と今の違いは、昨夜は Wi-Fi を使用していたのに対し、今日はセルラーで接続していることです。
私の仮説は、電話では、接続が wifi (およびおそらくイーサネット) の場合、HttpWebRequest は AllowReadStreamBuffering = false のみを尊重し、セルラー ネットワークを使用する場合はそれを無視してバッファリングするというものです。
HttpWebRequest がセルラー経由で接続されている場合に読み取りストリームのバッファリングを強制するのは本当ですか? この動作を確認するドキュメントを見つけることができなかったので、他の誰かがこれを経験したかどうか疑問に思っています. 後でこれをより徹底的にテストできるようになりますが、今のところ、質問することにしました。
更新 5-11-12
自分の質問をテストして回答しました (以下を参照)