5

J2ME 客户端正在使用分块传输编码发送 HTTP POST 请求。

当 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 模拟客户端的行为,例如

网址 http://localhost:15148/page.aspx

标头: 用户代理:提琴手传输编码:分块主机:somesite.com:15148

身体 兔兔兔。谢谢光临,很有用!

我上面的正文阅读器将返回一个长度为零的字节数组......蹩脚......

有谁知道如何在 IIS 和 ASP.NET 开发服务器(cassini)上启用分块编码?

我为 IIS 找到了这个脚本,但它不起作用。

4

2 回答 2

2

似乎是官方的:卡西尼不支持Transfer-Encoding: chunked请求。

默认情况下,客户端使用分块的 HTTP 传输编码发送大型二进制流。因为 ASP.NET 开发服务器不支持这种编码,所以不能使用此 Web 服务器来承载必须接受大型二进制流的流数据服务。

于 2010-11-27T21:34:49.113 回答
1

该网址不再起作用,因此很难直接对其进行测试。我想知道这是否可行,谷歌在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 回答