0


0

マネージドHTTPモジュールをサイト全体に展開するにはどうすればよいですか?

IIS 7へのリクエストとIIS 7からの応答をインターセプトする、マネージドHTTPモジュールを開発しています。 インターセプトされたメッセージは、カスタムフィルターによって一連のビジネスルールに基づいて変更されます。 ビジネスルールは構成ファイルに保存されます。

メッセージはWebサイト全体で傍受する必要があります。 これには、Webサイトの子として存在するアプリケーションまたは仮想ディレクトリが含まれます。 これに対する最初の試みは、目的のWebサイトのbinディレクトリにHTTPモジュールアセンブリをインストールすることでした(たとえば、既定のWebサイトのC:\ inetpub \ wwwroot \ bin)。

インストールしたら、次のように、Webサイトのweb.configファイルの ``要素を変更して、アセンブリを参照します。


Webサイトのweb.configファイルの ``要素も変更しました。


これは、Webサイトのほとんどのコンテンツに適しています。 ただし、Webサイト(たとえば、/ wwwroot / MyApplication)の下にアプリケーションが構成されている場合、そのWebアプリケーションの下のリソースに移動すると、次のエラーが表示されます。

_ ファイルまたはアセンブリ「Company.Product.Module、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = xxxxxxxxxxxxxxxx」またはその依存関係の1つをロードできませんでした。 システムは、指定されたファイルを見つけることができません。 _

これを回避する方法は2つあります。

オプション1:

HTTPモジュールアセンブリとすべての依存アセンブリを各アプリケーションのbinディレクトリにコピーします。 親ディレクトリの構成情報も複製する必要があると思います。 これは、Webサイトに追加されるアプリケーションが増えるにつれて管理の悪夢になります。

オプション2:

GACにHTTPモジュールアセンブリとすべての依存アセンブリをインストールします。 これは非常にうまく機能するようで、多くの管理オーバーヘッドを回避しますが、構成情報はどこにありますか? Webサイトのweb.configファイルにこの情報がすべての子アプリケーションで継承されている場合は?

マネージドHTTPモジュールサイト全体に展開するための推奨方法は何ですか? すべての構成が中央の場所にあるように、構成をどのように処理する必要がありますか?

3 Answer


3


モジュールをデプロイする

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:

先頭に戻るモジュールのテスト

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.
") %>


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


<%@ Import Namespace="MyModule" %>


Public Sub MyModule_OnMyEvent(src As Object, e As EventArgs)
  Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>")
End Sub



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


これまでのところ、順調に進んでいますが、設定をmachine.configに入れることはできますか? 複数の構成を維持するのを避けるには?


0


このdllをGACできますが、既に適切な場所にある場合は、x-copy展開のストーリーを壊してしまいます。 よろしければ、後でこのモジュールをapplicationHost.configの場所タグの設定に追加できます: