Веб-формы ASP.NET IHttpModule Singleton
-
21-09-2019 - |
Вопрос
У меня есть класс, который реализует IHttpModule в отдельной сборке с веб-сайта.Реализация модуля перехватывает запросы и перезаписывает URL-адреса веб-сайта.
Сопоставления хранятся в классе с запрошенным URL-адресом и URL-адресом назначения.
Второй пример, MTSingleton, от http://devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=486 подходит для создания списка сопоставлений?Есть ли лучший подход внутри реализации модуля?
Редактировать:Плохо, это для IIS 6.0 и .NET 3.5 SP1.
Решение
Похоже, вы хотите создать объект сопоставлений один раз в цикле приложения.Похоже, вы пытаетесь предотвратить создание этого снова и снова для каждого запроса.(Поясните, пожалуйста, если я ошибаюсь.)
Посмотрите методы на IHttpМодуль.Предполагая, что вы работаете с IIS 7.0, жизненный цикл ASP.Net покажет, что метод Init() запускается один раз.Это означает, что он запускается один раз за жизненный цикл приложения.Итак, запустите веб-сервер, первый запрос запустит Init(), затем последующим запросам не нужно будет запускать его, пока цикл приложения веб-сервера не обновится.
У вас должна быть возможность безопасно переместить код создания сопоставлений в метод Init(), который должен предоставить вам необходимые гарантии с помощью многопоточного одноэлементного типа инициализации.У вас по-прежнему должна быть многопоточная защита вашего объекта сопоставления, но метод Init() IHttpModule должен дать вам эффект «один раз и готово», который вы ищете.