Обработчики событий могут быть привязаны к событиям HttpApplication только во время инициализации IHttpModule.

Я получаю следующую ошибку

«Обработчики событий могут быть привязаны к событиям HttpApplication только во время инициализации IHttpModule». в следующем коде (строка жирным шрифтом или двойным **)

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;
    **app.EndRequest += new EventHandler(Application_EndRequest);**        
}

protected void Application_EndRequest(object sender, EventArgs e)
{
    UnitOfWork.Commit();
}

который упоминается в файле Global.asax. Кто-нибудь может понять, где мне не хватает? Спасибо.


person Zohaib    schedule 03.03.2011    source источник


Ответы (2)


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

Добавьте его в Application_Start в global.asax, а не в Application_BeginRequest, или лучше вместо этого создайте модуль HTTP.

Кроме того, я думаю, вам может даже не понадобиться обработчик событий. Метод с текущим именем будет вызываться по соглашению, аналогичному Page / Control AutoEventWireup (например, Page_Load). Просто обратите внимание, что это может иметь проблемы в приложениях ASP.NET MVC, как сообщают некоторые люди. Итак, я предлагаю переименовать функцию, добавить обработчик событий в Application_Start или, что еще лучше, в новый HTTP-модуль, который вы создаете.

person Meligy    schedule 03.03.2011
comment
Спасибо за вашу помощь. Связывание Application_EndRequest не требуется. Такого рода методы связаны автоматически. - person Zohaib; 03.03.2011

Попробуйте закомментировать строку, отмеченную «**». Asp.Net сам вызовет соответствующие методы, если за ними следуют соглашения об именах: "{Scope}" _ "{Event}", где "{Scope}" - это приложение, если вы хотите обрабатывать события уровня приложения, или "Session", если хотите. для обработки событий уровня сеанса, а "{Event}" - это имя события, например Start, End и т. д. Дополнительная информация: http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages

person wałdis iljuczonok    schedule 03.03.2011
comment
Спасибо. Ваша ссылка поможет мне узнать больше. - person Zohaib; 03.03.2011
comment
+1 Asp.Net сам вызовет соответствующие методы, если за ними следуют соглашения об именах: {Scope} _ {Event} - person Andrew; 15.07.2011