在我的项目中,silverlight客户端使用HttpWebRequest向http处理程序发送“POST”请求,并使用HttpWebResponse流从http处理程序获取响应(即zip文件)。在响应期间动态创建zip文件,以便http处理程序无法知道文件大小。如果zip文件大小低于268435456字节,http处理程序将完成响应而不会出现任何问题。但除此之外,HttpWebResponse流只获得268435456个字节,Stream.Read()返回零。在一些步骤之后,流被关闭并且HttpException(“远程主机关闭了连接。错误代码是0x800704CD。”)被抛出在http处理程序中。
客户端的代码段就在这里。
request.BeginGetResponse(new AsyncCallback(result =>
{
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
using (var responseStream = response.GetResponseStream())
{
int read = 0;
byte[] buffer = new byte[2048];
while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
downloadStream.Write(buffer, 0, read);
}
...
}
}
如果大小超过268435456字节responseStream.Read(buffer, 0, buffer.Length))
则返回零。首先,我认为这与web.config或IIS中的配置有关。但是当我使用html表单向浏览器上的http处理程序发送请求时,无论文件大小如何,我都可以获得整个zip文件。所以现在我认为这可能是HttpWebResponse类的问题。如果您对此问题或其他方法有任何疑问,请告诉我。
编辑。 我尝试在web.config中更改maxRequestLength,这对此问题毫无用处。