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
页眉: 用户代理:Fiddler 传输编码:分块 主持人:somesite.com:15148
车身 兔子兔子兔子。谢谢你的到来,它非常有用!
我上面的身体阅读器将返回一个零长度的字节数组... lame ...
有谁知道如何在IIS和ASP.NET Development Server(cassini)上启用分块编码?
我找到了this script用于IIS,但它无效。
答案 0 :(得分:2)
似乎是官方的:Cassini does not support Transfer-Encoding: chunked
requests.
默认情况下,客户端发送大量 通过使用分块HTTP实现二进制流 传输编码。 因为ASP.NET 开发服务器不支持 这种编码,你无法使用 这个Web服务器承载流媒体 必须接受大的数据服务 二进制流。
答案 1 :(得分: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());
}