Я разрабатываю управляемый HTTP-модуль, который будет перехватывать запросы и ответы от IIS 7. Перехваченные сообщения будут изменены на основе набора бизнес-правил с помощью специального фильтра. Бизнес-правила будут храниться в файле конфигурации.
Сообщения должны быть перехвачены на всем веб-сайте. Сюда входят любые приложения или виртуальные каталоги, которые существуют как дочерние элементы веб-сайта. Моей первой попыткой было установить сборку HTTP-модуля в каталог bin нужного веб-сайта (например, C:\inetpub\wwwroot\bin для веб-сайта по умолчанию).
После установки я изменяю элемент <compilation> файла web.config веб-сайта, чтобы он ссылался на сборку, например так:
<compilation debug="false">
<assemblies>
<add assembly="Company.Product.Module, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx" />
</assemblies>
</compilation>
Я также изменил элемент <modules> файла web.config веб-сайта.
<system.webServer>
<modules>
<add name="MyModule" type="Company.Product.Module.MyModule" />
</modules>
</system.webServer>
Это хорошо работает для большей части содержимого веб-сайта. Однако, если на веб-сайте настроено приложение (например, /wwwroot/MyApplication), я получаю следующую ошибку при переходе к любому ресурсу в этом веб-приложении:
Не удалось загрузить файл или сборку "Company.Product.Module, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx" или одну из ее зависимостей. Система не может найти указанный файл.
Я знаю два способа обойти это:
Вариант 1:
Скопируйте сборку модуля HTTP и все зависимые сборки в каталог bin каждого приложения. Я считаю, что мне также нужно будет дублировать информацию о конфигурации из родительского каталога. Это может стать кошмаром для управления, поскольку на веб-сайт добавляется все больше и больше приложений.
Вариант 2:
Установите сборку модуля HTTP и все зависимые сборки в GAC. Кажется, это работает довольно хорошо и позволяет избежать больших накладных расходов на управление, однако где находится информация о конфигурации? Если в файле web.config веб-сайта эта информация наследуется во всех дочерних приложениях?
Каков рекомендуемый метод развертывания управляемого HTTP-модуля на всем сайте? Как следует обрабатывать конфигурацию, чтобы вся конфигурация находилась в одном месте?