C# 发布从Web应用程序下载文件-ASP.NET Web表单应用程序

C# 发布从Web应用程序下载文件-ASP.NET Web表单应用程序,c#,asp.net,file,webforms,C#,Asp.net,File,Webforms,目前,我在ASP.NET Web表单应用程序中遇到了一个问题,有些人无法获取所请求的完全下载的文件 该文件有时会完全下载,但有时在经过一定的字节数后会一直挂起,最终浏览器似乎会提示网络错误。我想再次强调的是,有时候没关系,有时候下载被卡住了,没有响应。我试过试一试,但一无所获 我无法在测试web服务器上复制它,它只发生在生产环境中,这使得这个问题更难发现 似乎没有任何东西通过flush,发生这种情况时正在执行语句。如果没有发生,一切都是正常的 public void DownloadFile(b

目前,我在ASP.NET Web表单应用程序中遇到了一个问题,有些人无法获取所请求的完全下载的文件

该文件有时会完全下载,但有时在经过一定的字节数后会一直挂起,最终浏览器似乎会提示网络错误。我想再次强调的是,有时候没关系,有时候下载被卡住了,没有响应。我试过试一试,但一无所获

我无法在测试web服务器上复制它,它只发生在生产环境中,这使得这个问题更难发现

似乎没有任何东西通过flush,发生这种情况时正在执行语句。如果没有发生,一切都是正常的

public void DownloadFile(byte[] fileImage, string fileName )
{
    if (fileImage == null) return;
    string fileExt = fileName.Substring(fileName.LastIndexOf('.') + 1);
    string disposition = string.Format("attachment;filename=\"{0}\"", fileName);

    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = GetContentType(fileExt);
    Response.ContentEncoding = System.Text.Encoding.Default;   
    Response.AddHeader("content-disposition", disposition);
    Response.BinaryWrite(fileImage);
    Response.Flush();
    Response.End();
}
 

所以我发现问题是由负载平衡器引起的,而不是代码。负载平衡器处理SSL的方式似乎是导致这种情况的关键因素。目前的解决方案是将SSL处理卸载到Web服务器。

是否存在某种大小的阈值?例如,小文件可以下载,但大文件不能?可能是防火墙或负载平衡器等网络设备施加了响应限制。文件是否超过4MB?标准缓冲区是4MB,因此可能会出现这个问题。在客户端浏览器控制台中,用户是否收到错误消息?它的大小可以从2mb到30mb不等,因此非常小,考虑到更大的大小。它有时可以下载更大的文件。负载平衡器限制设置为1gb左右,所以不要认为是这样,我看不出防火墙有任何明显的问题。控制台窗口中没有错误。您是否尝试将Response.Close()置于flush和end之间?