HttpUnhandledException ASP.NET

HttpUnhandledException ASP.NET,asp.net,httpunhandledexception,Asp.net,Httpunhandledexception,我有一个ASP.NET网站。如果我请求一个页面,它大多数时候都会工作,但有时我会得到一个HttpUnhandledException 我已尝试记录错误,但从错误消息中我无法解决问题 堆栈跟踪: at System.Web.UI.Page.HandleError(Exception e) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAf

我有一个ASP.NET网站。如果我请求一个页面,它大多数时候都会工作,但有时我会得到一个HttpUnhandledException

我已尝试记录错误,但从错误消息中我无法解决问题

堆栈跟踪:

at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.default_aspx.ProcessRequest(HttpContext context) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\4e215a3c\72ef69da\App_Web_ylvnbciw.6.cs:line 0
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
数据:

基本例外:

System.InvalidOperationException: The connection was not closed. The connection's current state is open.
   at DbCategory.getParentCategories()
   at _Default.Page_Load(Object sender, EventArgs e)
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
目标地点:

Boolean HandleError(System.Exception)

我知道这是关于我的会话og get变量的,但我不确定。有人知道它可能是什么吗?

一个好的、常见的做法是在使用块时使用Db对象(DbConnection、DbCommand、Reader、Adapter等)


这将防止99%的此类事件发生,方法是确保在您使用完对象后始终对其进行处理。

此类错误不是由于错误处理造成的-连接未关闭

这样的错误可能会在静态类或保持打开连接的方法中使用SqlConnection,然后-在非静态中,此时可能会发生异常


更新: 好吧,这个方法不是很节省-它确实像我所说的那样-他创建了连接,但从不释放它。 SqlConnection是一个非常沉重的对象,您应该在获取或设置数据后立即处理它

您应该重写您的逻辑-每个页面或每个操作创建一个连接,并且您永远不应该在类中存储该连接

如果这对您来说是不可能的,请使用lock语句来确保singleton,如下所示:

private static object singleton;

lock (singleton)
{
    // Some manipulations with your server
}

VMAtm:也许你得到了一些东西,因为在网站获得越来越多的用户之后,异常显示了更多。我有一个静态类,使用单例方法保存数据库连接

public static SqlConnection getDbConnection() 
{ 
    if (sqlConn == null) 
    { 
        source = "data source=..."; 
        sqlConn = new SqlConnection(source); 
    }
    return sqlConn; 
}
这种方法完全省钱吗


使用静态方法在抽象类中调用所有数据库调用,并且这些抽象类从singleton方法获取db连接

因此,您的意思是,当所有服务器操作完成并将结果返回到用户浏览器时,db连接不会自动释放?如果是,是否有一种方法会自动调用,以便在所有服务器活动完成后释放连接?1。您可以使用SQLConnection2的.Close()或.Dispose()方法。您可以使用using语句:using(SqlConnection conn=newsqlconnection(DB_CONNECTION_STRING)){//some code go here}using块中的所有代码完成后,SqlConnection将自动释放。通过使用“using(..){..}”,我想我的问题已经解决了。过去两天我没有登记任何错误,而之前每天大约有20个。非常感谢你。
public static SqlConnection getDbConnection() 
{ 
    if (sqlConn == null) 
    { 
        source = "data source=..."; 
        sqlConn = new SqlConnection(source); 
    }
    return sqlConn; 
}