J2ME客户端正在发送带有分块传输编码的HTTP POST请求。
当ASP.NET(同时在IIS6和WebDev.exe.server中)尝试读取请求时,它将Content-Length设置为0。我猜这是可以的,因为在加载请求时,Content-length是未知的。
但是,当我读到最后的Request.InputStream时,它返回0。
这是我用来读取输入流的代码。
1 2 3 4 5
| 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,但无法正常工作。
似乎是官方的:Cassini不支持Transfer-Encoding: chunked请求。
By default, the client sends large
binary streams by using a chunked HTTP
Transfer-Encoding. Because the ASP.NET
Development Server does not support
this kind of encoding, you cannot use
this Web server to host a streaming
data service that must accept large
binary streams.
该url不再起作用,因此很难直接对其进行测试。 我想知道这是否行得通,谷歌在bytes.com上找到了一个有经验的人。 如果您再次建立您的网站,我可以看看这是否真的可行。
Joerg Jooss写道:(为简洁起见略作修改)
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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());
} |