ASP.Net Response.Close问题

Geo*_*ge2 6 .net c# asp.net iis-7 visual-studio-2008

我使用ASP.Net + .Net 3.5 + VSTS 2008 + IIS 7.0 + C#来开发Web应用程序.我发现在VSTS 2008中进行调试时,如果我在page_load中调用Response.Close()方法(请参考下面的代码),则会出现错误(从IE访问页面时),无法连接到服务器.

我的问题是,

  1. 通常什么时候应该调用Response.Close()?或者不需要调用(依靠ASP.Net框架自动关闭)?

BTW:我之前的理解是开发人员在服务器端完成处理并且所有数据都已使用Response.Write写入客户端时应始终调用Response.Close.我对么?

2为什么我的代码中遇到了这样的错误?根本原因是什么?

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Hello World! ");
        Response.Close();
    }

And*_*ndy 10

以下来自MSDN网站可能对此有用:

此方法以突然方式终止与客户端的连接,并非用于正常的HTTP请求处理.该方法向客户端发送重置数据包,这可能导致在服务器,客户端或其间某处缓冲的响应数据被丢弃.

您可以使用此方法来响应恶意HTTP客户端的攻击.但是,如果要跳转到EndRequest事件并向客户端发送响应,通常应该调用CompleteRequest.

  • "你可能会使用这种方法来应对恶意HTTP客户端的攻击." (2认同)

Cra*_*gTP 6

您通常不应该Response.Close在"正常"ASP.NET处理中使用该方法.

写入HttpResponse"流"的所有数据在发送到客户端浏览器之前都会被缓冲.该Response.Close方法将突然终止HTTP连接,您可能会丢失您之前无意中响应的数据.

如果你真的想以编程方式"强制"响应流的结束,你应该使用:Response.Flush();afterResponse.End();

Response.Flush方法调用确保您可能已经写入响应流中的所有数据是"刷新"到客户端,并Response.End确保所有当前缓冲的数据被正确发送到客户端,也引起了EndRequest事件,这可能要处理.

您也可以使用HttpApplication's CompleteRequest()方法.

MSDN文档最好的状态是:

此方法以突然方式终止与客户端的连接,并非用于正常的HTTP请求处理.该方法向客户端发送重置数据包,这可能导致在服务器,客户端或其间某处缓冲的响应数据被丢弃.

您可以使用此方法来响应恶意HTTP客户端的攻击.但是,如果您想要跳转到EndRequest事件并向客户端发送响应,通常应该调用CompleteRequest().