在Firefox下文件下载后,ASP.NET TCP重置

时间:2011-04-18 17:48:09

标签: asp.net

所以我在这方面已经结束了,并一直在寻找答案。我有一个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();

}

0 个答案:

没有答案