我们应用程序的用户在一天中至少每两秒钟下载一次附件。
以前的场景:
在用户下载附件后,我们使用 Response.End() 中止与客户端的连接。当我们遇到性能问题时,我们开始记录异常,其中最重复的一个是线程中止异常。由于我们从 Web 服务获取附件,因此我们必须进行一些清理,并且我们在 try-catch-finally 块中进行了清理。经过一番研究,我了解到 Response.End() 之后的任何代码即使在 finally 块中也不会被执行。是对的吗?
当前场景:
我已经阅读了堆栈溢出中有关 Response.End() 有害的线程,并且仅在真正需要时才需要使用它,因此我决定改用 HttpContext....CompleteRequest() 。使用此代码,完成了所需的清理工作,但呈现的 html 被附加到下载的附件中。我尝试覆盖同一篇文章中建议的 Render 和 RaisePostBackEvent,但问题仍然存在。有关如何解决此问题的任何想法都会有所帮助。
代码:
HttpContext.Current.Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment; filename=" +
filename);
Response.AddHeader("Content-Length", fileContent.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(fileContent);
Response.Flush();