Имеется проблемка:
Делаю обработчик событий приложения. Начальство приказало убрать все из Global.asax в отдельный модуль. Делаю
public class ErrorModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.Error += new EventHandler(application_Error);
}
public void application_Error(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
System.Web.SessionState.HttpSessionState Session = HttpContext.Current.Session;
Exception exception = app.Server.GetLastError();
if (null != exception)
{
Session[ErrorHelperStrings.BackUrl] = app.Request.UrlReferrer;
Session[ErrorHelperStrings.ErrorMessage] = exception.Message;
Session[ErrorHelperStrings.Exception] = exception;
}
app.Server.Transfer("~/ErrorPage.aspx");
}
После трансфера на страничку ошибки берем сохраненные данные из сессии и выдаем отчет. Самое веселое начинается потом. На той страничке есть кнопочка возврата на страницу, где произошла ошибка. Когда на нее нажимаем и смотрим дебаггер — сессия пуста. Если убрать app.Server.Transfer из вышеприведенного кода то вообще никакие данные до страницы ошибки не дойдут.
Но это еще не всё

Если где-нить на Default.aspx поставить строчку Session["tra-ta-ta"] = "qwe" и уже потом баловаться с обработкой ошибок — сессия при обновлении ErrorPage не стирается, т.е. все работает как задумывалось.
Вопрос: где зарыта собака?