5

J2MEクライアントは、チャンク転送エンコーディングを使用してHTTPPOSTリクエストを送信しています。

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:Fiddler Transfer-Encoding:Chunked Host:somesite.com:15148

うさぎうさぎうさぎうさぎ。来てくれてありがとう、とても便利でした!

上からの私のボディリーダーは、長さがゼロのバイト配列を返します...ラメ...

IISおよびASP.NET開発サーバー(カッシーニ)でチャンクエンコーディングを有効にする方法を知っている人はいますか?

IIS用のこのスクリプトを見つけましたが、機能していません。

4

2 に答える 2

2

公式のようです:カッシーニはリクエストをサポートしていません。Transfer-Encoding: chunked

デフォルトでは、クライアントはチャンク化されたHTTPTransfer-Encodingを使用して大きなバイナリストリームを送信します。ASP.NET開発サーバーはこの種のエンコーディングをサポートしていないため、このWebサーバーを使用して、大きなバイナリストリームを受け入れる必要のあるストリーミングデータサービスをホストすることはできません。

于 2010-11-27T21:34:49.113 に答える
1

その URL は機能しなくなったため、これを直接テストすることは困難です。これが機能するかどうか疑問に思ったところ、Google はbytes.comで経験のある人を見つけました。あなたのウェブサイトをもう一度立ち上げていただければ、これが実際に機能しているかどうかを確認できます.

Joerg Joossは次のように書いています: (簡潔にするためにわずかに変更されています)

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());
}
于 2008-09-17T06:40:06.993 に答える