在这种情况下无法获得响应。回复于(ex.ToString());

时间:2011-03-25 05:49:38

标签: c# asp.net global-asax

我在经典代码之后的global.asax中编写了这段代码。每次我启动网站时都会显示此错误。刷新页面后,它会转到正确的页面。我不明白为什么。

  

此处不提供回复   上下文。描述:未处理   期间发生了异常   执行当前的Web请求。   请查看堆栈跟踪了解更多信息   有关错误的信息和位置   它起源于代码。

     

异常详细信息:   System.Web.HttpException:响应是   在这种情况下不可用。

     

来源错误:

Line 26:         catch (Exception ex)
Line 27:         {
Line 28:             Response.Write(ex.ToString());
Line 29:         }
Line 30: 
     

< script runat =“server”>

void Application_Start(object sender, EventArgs e) 
{
    try
    {
        if (Roles.RoleExists("Administrators") == false)
            Roles.CreateRole("Administrators");
        if (Membership.FindUsersByName("ken").Count == 0)
        {
            Membership.CreateUser("ken", "123", "ken@jobpost.com");
            Roles.AddUserToRole("ken", "Administrators");
        }
        if (Membership.FindUsersByName("dan").Count == 0)
            Membership.CreateUser("dan", "123", "dan@jobpost.com");


    }
    catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }

}

< /脚本>

2 个答案:

答案 0 :(得分:2)

Application_Start仅在IIS启动应用程序时执行一次。问题的实际原因在于try块内部的代码,您可以使用日志框架或在catch块中设置断点来诊断它。

您不能在catch块中使用Response.Write,因为没有与Application_Start关联的Request(或Response)。这样做会触发一个新的异常,它会隐藏问题的原因。有关详细信息,请查看ASP.NET Application Lifecycle

答案 1 :(得分:0)

我相信很可能你的应用启动代码中存在一些问题会导致异常,导致你遇到阻塞。由于某种原因,响应对象不可用,因此您得到一个未处理的异常。由于应用程序已经启动,因此不会再次访问代码路径,并且您在后续请求中看不到错误。

我建议您将异常记录在一个文件中,而不是发送它以响应检查原始异常详细信息,这些详细信息将掩盖实际问题以及为什么响应不可用。您可以使用System.Diagnostic.Trace和跟踪侦听器进行日志记录(或者您可以使用诸如Log4Net或MS Logging App Block之类的库)