远程主机关闭了连接 - asp.net MVC3

时间:2013-05-30 17:16:00

标签: c# asp.net-mvc-3

当我的网站构建PDF并打开对话框以允许用户保存或打开它时,我不断收到此错误消息。

这是Elmah中的完整错误:

The remote host closed the connection. The error code is 0x800704CD

现在,我很确定用户永远不会看到这个错误,但是我的日志充满了它们,我只想摆脱它!

点击我页面上的链接链接到构建pdf的控制器操作。以下是代码的最后一部分:

        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.ContentType = "application/pdf";
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=filename.pdf");
        HttpContext.Current.Response.BinaryWrite(stream.ToArray());
        HttpContext.Current.Response.Flush();
        stream.Close();
        HttpContext.Current.Response.End();

        Return View();

我认为是Response.End()抛出错误,因为操作在响应结束后尝试继续。这听起来不对吗?如果是这样,我能做些什么来阻止它吗?

即使用户没有看到错误,我也看到它并且必须解决!

谢谢 - 如果您需要更多信息,请与我们联系

1 个答案:

答案 0 :(得分:1)

我建议使用FileResult类型返回文件内容。以下是MSDN文档的链接:http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult(v=vs.98).aspx

要回答您的问题,Response.End会导致线程立即中止,并且在此之后尝试运行的任何代码都会在服务器端引发异常。由于响应已经传递给客户端,因此它只会出现在日志中。

原始的响应对象的操作在MVC中通常是不受欢迎的,因为它绕过了框架的神奇基础。

填充FileResult将允许您执行工作,将文件内容作为流提供并命名下载的文件。填充完所需的属性后,只需返回FileResult,而不是返回View()