HttpUnhandledException ASP.NET - PullRequest
       20

HttpUnhandledException ASP.NET

3 голосов
/ 20 апреля 2010

У меня есть веб-сайт ASP.NET. Если я делаю запрос на страницу, она работает большую часть времени, но иногда я получаю HttpUnhandledException.

Я пытался регистрировать ошибки, но из сообщений об ошибках я не могу решить проблему.

StackTrace:

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.Collections.ListDictionaryInternal

BaseException:

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)

TargetSite:

Boolean HandleError(System.Exception)

У меня есть идея, что это что-то в моем сеансе или переменные, но я не уверен в этом. Кто-нибудь имеет представление о том, что это может быть?

Ответы [ 3 ]

1 голос
/ 20 апреля 2010

Такие ошибки не из-за неправильной утилизации - соединение НЕ было закрыто.

Такая ошибка может быть тогда, когда вы используете SqlConnection в статическом классе или методе, который держит открытое соединение, а после этого - в нестатическом, и в этот момент может произойти исключение.


Обновление: Ну, этот метод не очень экономит - он делает именно то, о чем я говорил - он создает соединение, но никогда не освобождает его. SqlConnection - очень тяжелый объект, и вы должны утилизировать его сразу после получения или установки своих данных.

Вы должны переписать свою логику - создать одно соединение на страницу или на операцию, и вы никогда не должны хранить соединение в ваших классах.

Если это невозможно для вас, используйте оператор блокировки для гарантии синглтона, например так:

private static object singleton;

lock (singleton)
{
    // Some manipulations with your server
}
1 голос
/ 20 апреля 2010

Хорошей и распространенной практикой является использование объектов Db (DbConnection, DbCommand, считывателей, адаптеров и т. Д.) В блоке Using.

Это предотвратит 99% случаев такого рода вещей, гарантируя, что объекты всегда удаляются, когда вы их используете.

0 голосов
/ 20 апреля 2010

VMAtm: Может быть, у вас что-то есть, потому что исключение показывает намного больше после того, как сайт получает все больше и больше пользователей. У меня есть статический класс для хранения соединения с базой данных с помощью метода singleton ...

public static SqlConnection getDbConnection() 
{ 
    if (sqlConn == null) 
    { 
        source = "data source=..."; 
        sqlConn = new SqlConnection(source); 
    }
    return sqlConn; 
}

Этот метод полностью сохраняет?

Все вызовы базы данных вызываются в абстрактных классах с использованием статических методов, и эти абстрактные классы получают соединение db от метода singleton

...