#asp.net #web-applications
#asp.net #веб-приложения
Вопрос:
В моем приложении я определяю класс, который реализует ihttpmodule и содержит следующие методы
public void Init(HttpApplication application)
{
application.EndRequest = new EventHandler(Application_EndRequest);
}
private void Application_EndRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
IObjectContainer objectClient = context.Items[KEY_DB4O_CLIENT] as IObjectContainer;
if (objectClient != null)
{
objectClient.Close();
}
objectClient = null;
context.Items[KEY_DB4O_CLIENT] = null;
}
когда я пытаюсь запустить приложение и отладить его, я замечаю одну странную вещь:
в Chrome private void Application_EndRequest (отправитель объекта, EventArgs e) выполняется 3 раза при запуске приложения и еще 3 раза при завершении приложения.
в Internet Explorer private void Application_EndRequest (отправитель объекта, EventArgs e) выполняется 2 раза при запуске приложения и еще 2 раза при завершении приложения.
Почему Application_EndRequest выполняется несколько раз. Разве это не должно выполняться только один раз?
А также я хотел бы знать разницу между веб-сервером разработки Visual Studio и IIS?
В чем разница между обоими мной.
Пожалуйста, помогите мне
Спасибо в ожидании
Комментарии:
1. Я вижу одно и то же, вы когда-нибудь выясняли, почему? Я захожу на сайт с помощью
curl
, поэтому я сомневаюсь, что происходит что-то еще.
Ответ №1:
Application_EndRequest()
будет вызываться столько раз, сколько запросов обрабатывается средой выполнения. С сервером VSDev это будет каждый запрос; включая запросы к изображениям и другим различным ресурсам, которые может искать браузер … например, изображение значка закладки.
Это также может объяснить разницу между браузерами; IE и Chrome могут отличаться в том, какие дополнительные функции они пытаются запросить, в частности, повторно: значок сайта.
Комментарии:
1. @Andrew является ли добавление методов Application_EndRequest и Init в приложении накладными расходами, поскольку они должны выполняться несколько раз перед каждым запросом? И есть ли явный способ вызывать их только один раз при запуске и завершении приложения?
2. Вы имеете в виду,
Application_Start
иApplication_End
, может быть?3. @Andrew похоже, что они выполняются, когда в их выполнении нет необходимости? Почему они выполняются таким образом?
4. Нет, они вызываются именно тогда, когда они должны быть … в конце каждого запроса … вот почему это называется «EndRequest». То, что вы хотите, это
Application_End
… нетApplication_EndRequest
.5. @Andrew я постараюсь вернуться к вам.