2008-09-16 26 views
4

J2MEクライアントがチャンク転送エンコードでHTTP POST要求を送信しています。チャンクされた転送の本文がASP.NETのエンコードされたHTTP要求を受け取ります

ASP.NET(IIS6とWebDev.exe.serverの両方)が要求を読み込もうとすると、Content-Lengthが0に設定されます。要求がロードされたときにContent-lengthが不明なのでこれは問題ありません。

しかし、私は最後までRequest.InputStreamを読んだとき、それは0

を返すここで私は、入力ストリームを読み取るために使用しているコードです。

using (var reader = new StreamReader(httpRequestBodyStream, BodyTextEncoding)) { 
    string readString = reader.ReadToEnd(); 
    Console.WriteLine("CharSize:" + readString.Length); 
    return BodyTextEncoding.GetBytes(readString); 
} 

私は、クライアントの行動をFiddlerでシミュレートできます。

URL http://localhost:15148/page.aspx

ヘッダ: のUser-Agent:フィドラー 転送 - エンコード:チャンク ホスト:somesite.com:15148

ボディ ウサギウサギウサギウサギ。来てくれてありがとう、とても便利でした!上記から

私の体のリーダーは

誰もがIISとASP.NET開発サーバー(カッシーニ)にチャンクエンコーディングを有効にする方法を知っている... ...ラメ長さがゼロのバイト配列を返しますか?

IIS用にthis scriptが見つかりましたが、機能しません。

答えて

1

urlはこれ以上動作しないため、これを直接テストするのは難しいです。私はこれがうまくいくのだろうかと思って、bytes.comでそれを経験したことがある人を見つけました。あなたのウェブサイトを再び立ち上げると、これが本当にうまくいくかどうかわかります。

イェルクヨース書きました:(は少し簡潔用に変更)

string responseText = null; 
WebRequest rabbits= WebRequest.Create(uri); 
using (Stream resp = rabbits.GetResponse().GetResponseStream()) { 
    MemoryStream memoryStream = new MemoryStream(0x10000); 
    byte[] buffer = new byte[0x1000]; 
    int bytes; 
    while ((bytes = resp.Read(buffer, 0, buffer.Length)) > 0) { 
     memoryStream.Write(buffer, 0, bytes); 
    } 
    // use the encoding to match the data source. 
    Encoding enc = Encoding.UTF8; 
    reponseText = enc.GetString(memoryStream.ToArray()); 
} 
2

正式ているように見える:デフォルトではCassini does not support Transfer-Encoding: chunked requests.

、クライアントが使用することにより、大 バイナリストリームを送信しますチャンクされたHTTP 転送エンコーディング。 ASP.NET 開発サーバーが エンコーディングのこの種をサポートしていないので、あなたは大きな バイナリストリームを受け入れなければならないストリーミング データサービスをホストする このWebサーバーを使用することはできません。

関連する問題