2009-11-19 8 views
1

У меня есть класс, который реализует IHttpModule в отдельной сборке с веб-сайта. Реализация модуля перехватывает запросы и переписывает URL-адреса для веб-сайта.ASP.NET Webforms IHttpModule Singleton

Отображения хранятся в классе с запрошенным URL-адресом и адресом назначения.

Является вторым примером, MTSingleton, от http://devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=486 подходит для создания списка сопоставлений? Есть ли лучший подход в реализации модуля?

Edit: Мое плохое, это для IIS 6.0 и .NET 3.5 SP1

ответ

3

Похоже, вы хотите создать отображения объекта один раз в вашем приложении цикла. Похоже, вы пытаетесь помешать этому создавать снова и снова за запрос. (Пожалуйста, уточните, если я ошибаюсь.)

Посмотрите на методы на IHttpModule. Предполагая, что вы работаете с IIS 7.0, the ASP.Net lifecycle, будет показано, что метод Init() запускается один раз. Значит, он запускается один раз на жизненный цикл приложения. Итак, запустите веб-сервер, первый запрос будет запускать Init() в передачу, а затем последующие запросы не нужно запускать его до тех пор, пока цикл приложений веб-сервера не будет обновлен.

Вы должны иметь возможность безопасно перемещать код создания сопоставлений в метод Init(), который должен предоставить вам защитные меры, которые вы ищете с помощью многопоточного одноэлементного типа инициализации. У вас все равно должны быть многопоточные защиты вокруг вашего объекта сопоставления, но метод Init() IHttpModule должен дать вам эффект «один раз-и-сделанный», который вы ищете.

+0

Да, первый абзац - это то, что я пытаюсь выполнить. Я использую IIS 6.0, есть ли у Init все же такое же поведение? – blu

+0

Это похоже на то же самое в IIS 6.0, Init вызывается один раз. – blu

+0

Я считаю, что IIS6 демонстрирует то же поведение, да. – jro