所以我在这方面已经结束了,并一直在寻找答案。我有一个ASP .net 3.5应用程序,它具有允许用户下载和查看存储在数据库中的文件的功能。用户单击链接以下载文件,然后单击站点中的任何其他链接后,他们会看到Firefox黄色屏幕(XML解析错误:元素格式不正确......)我明白当发生什么时会发生什么Firefox获得一个空白页面。在IE中工作正常。
尝试了几乎所有内容(在新窗口中打开下载处理到通用http处理程序,在文件下载之后/之前/之后清除响应缓冲区,清除下载后的响应头)我查看了HttpFox中的头文件,它说这是一个中止或什么的。因此,当wireshark中发生错误时,我会看到它,结果发现从服务器发送了一堆TCP RST标志。
最后一点信息,如果您在下载后非常快速地单击另一个链接,它可以工作,但在后续操作中仍然会这样做,这让我相信一些异步操作最终导致连接重置。
任何帮助都会非常感激,我已经对这个问题持续了一个星期了。以下是我的代码,StorageItem是我的Web主机(Rackspace)中的一个类,其中文件存储在云中:
public void ViewFile(string containerName, string FileName, string clientFileName, string extension)
{
StorageItem fileItem = conn.GetStorageItem(containerName, FileName);
int readLength = 2097152;
long fileLength = fileItem.FileLength;
int numIterations = Convert.ToInt32(fileLength / Convert.ToInt32(readLength)) + 1;
HttpResponse Response = HttpContext.Current.Response;
Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}{1}", clientFileName, extension));
Response.AddHeader("Content-Length", fileItem.FileLength.ToString());
Response.ContentType = fileItem.ContentType;
byte[] imageBytes = new byte[readLength];
Stream inputStream = fileItem.ObjectStream;
int i = 0;
Response.Flush();
for (i = 0; i < numIterations; i++)
{
long curPosition = fileItem.ObjectStream.Position;
if (curPosition + readLength > fileLength)
readLength = Convert.ToInt32(fileLength - curPosition);
inputStream.Read(imageBytes, 0, readLength);
Response.BinaryWrite(imageBytes);
if (numIterations + 1 % 30 == 0)
inputStream.Flush();
}
inputStream.Close();
fileItem.ObjectStream.Close();
Response.End();
}