【发布时间】:2012-05-23 03:08:48
【问题描述】:
我们应用程序的用户在一天中至少每两秒钟下载一次附件。
上一个场景:
在用户下载附件后,我们使用 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();
【问题讨论】:
-
请不要在标题前加上“C#”之类的前缀。这就是标签的用途。
-
当然。对于那个很抱歉。我刚开始在这里发帖。我会确保不再重复。
标签: c#