Как развернуть управляемый модуль HTTP на всем сайте? - PullRequest
0 голосов
/ 05 ноября 2010

Я разрабатываю управляемый модуль 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, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = xxxxxxxxxxxxxxxx 'или одна из ее зависимостей.Системе не удается найти указанный файл.

Существует два способа обойти это:

Опция 1:

Копироватьсборка модуля HTTP и все зависимые сборки в каталоге bin каждого приложения.Я считаю, что мне также нужно будет дублировать информацию о конфигурации из родительского каталога.Это может стать кошмаром управления, поскольку на веб-сайт добавляется все больше приложений.

Опция 2:

Установите сборку модуля HTTP и все зависимые сборки вGAC.Это, кажется, работает довольно хорошо и позволяет избежать больших накладных расходов на управление, однако, где находится информация о конфигурации?Если в файле web.config веб-сайта эта информация унаследована во всех дочерних приложениях?

Каков рекомендуемый метод развертывания всего управляемого сайта модуля HTTP?Как обрабатывать конфигурацию, чтобы вся конфигурация находилась в центральном месте?

Ответы [ 3 ]

3 голосов
/ 07 апреля 2016

Развертывание модуля

Create a new directory under C:\Inetpub\Wwwroot named Module.
Create a subdirectory named Bin in the newly created Module directory. The resultant path is C:\Inetpub\Wwwroot\Module\Bin.
Copy MyModule.dll from your project's Bin\Debug directory to the C:\Inetpub\Wwwroot\Module\Bin directory.
Follow these steps to mark the new Module directory as a Web application:
    Open Internet Services Manager.
    Right-click the Module directory, and then click Properties.
    On the Directory tab, click Create.
    Click OK to close the Module Properties dialog box.

к началу страницы Настройка системы

In the C:\Inetpub\Wwwroot\Module directory, create a new file named Web.config.
Paste the following text into Web.config:


<configuration>
   <system.web>
      <httpModules>
         <add name="MyModule" type="MyModule.SyncModule, MyModule" />
      </httpModules>
   </system.web>
</configuration>

к началу страницы Проверка модуля

In the C:\Inetpub\Wwwroot\Module directory, create a new .aspx file named Test.aspx.
Paste the following text into Test.aspx:


<%@Page Language="VB"%>
<% Response.Write("Hello from Test.aspx.<br>") %>


In the C:\Inetpub\Wwwroot\Module directory, create a Global.asax file.
Paste the following code in Global.asax:


<%@ Import Namespace="MyModule" %>

<script language="VB" runat=server >
Public Sub MyModule_OnMyEvent(src As Object, e As EventArgs)    
  Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>")
End Sub
</script>


Request the Test.aspx page. You should see the following lines of text:


Hello from OnBeginRequest in custom module.
Hello from MyModule_OnMyEvent called in Global.asax.
Hello from Test.aspx.
0 голосов
/ 06 ноября 2010

Вы можете GAC эту dll, но это сломало бы вашу историю развертывания ксерокопии, если у вас уже есть один на месте.Если с вами все в порядке, вы можете позже добавить этот модуль в конфигурацию в applicationHost.config в тегах местоположения: <location path="MySite">, <location path="MySite/MyApp">

0 голосов
/ 05 ноября 2010

Пока вы на правильном пути, вы можете поместить свои конфиги в machine.config?избежать ведения нескольких конфигов?

...