我们的应用程序的用户在白天至少两秒内下载一个附件.
以前的场景:
我们使用Response.End()在用户下载附件后中止与客户端的连接.由于我们遇到性能问题,我们开始记录异常,其中最重复的一个是线程中止异常.由于我们从Web服务获取附件,我们必须进行一些清理,并且我们在try-catch-finally块中进行了清理.经过一些研究,我已经理解,即使它在finally块中,也不会执行Response.End()之后的任何代码.是对的吗?
目前的情景:
我已经阅读了关于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();
Run Code Online (Sandbox Code Playgroud)
Response.End内部抛出ThreadAbortException以杀死请求 - 如果你需要进行某种清理,这需要在调用之前Response.End完成.
Response.Redirect并且Response.End与try/catch块不能很好地交互.因此,在您的情况下,您应该将所有逻辑写入try/catch中的响应流,然后Response.End在finally块之后调用.
| 归档时间: |
|
| 查看次数: |
32742 次 |
| 最近记录: |