MicrosoftのIIS上のHttpModuleを作るときの注意点をいくつか。
基本的には、以下のWebサイトで全てだけど、自分用のメモ的位置づけ
参考
- [ASP.NET]アプリケーション共通のロギングを行うには?(HTTPモジュール編)
- How To Create an ASP.NET HTTP Module Using Visual C# .NET
- Custom HttpModule Example
- INFO: ASP.NET HTTP Modules and HTTP Handlers Overview
ISAPIとの比較
多分、以下のような対応関係がイメージしやすいかもしれない
- ISAPIフィルタとHttpModule
- ISAPI拡張とHttpHandler
ただし、ワイルドカードHttpHandleとかもあるから、1:1対応とはいえないかもしれない。
作成から登録までの基本的な流れ
- system.web.dllに含まれているSystem.Web.IHttpModuleインターフェイスを継承してDLLを作る
- イベントドリブンな普通のWindowsFormアプリケーションを作るような感覚で C# でコーディングできる
- Webアプリケーション(IISマネージャで設定する)配下の「bin」というディレクトリにdllを配置する
- アプリケーションプールと同じ.NET FrameworkのバージョンでコンパイルしたDLL(HttpModuleをコンパイルしたDLL)でないと動作しないよ
- IISマネージャのGUIの一覧には出てこないかもしれない
- web.configのaddタグは、system.web→httpModulesタグでもsystem.webserver→modulesタグでも一緒だと思うけど、こちらの書式が、「<add type=”[COM+ Class], [Assembly]” name=”[ModuleName]” />」
- COM+ Class というのは、名前空間から始まってクラス名まで。(つまり、クラスのフルパスだな)
- Assembly というのは、dllのファイル名(dllという拡張子は除く)
- ModuleName は任意だと思うぞ
実行ユーザ名
System.Environment.UserName の結果(EndRequestイベント)は、アプリケーションプールの「全般」の「名前」でした。(.NET4 の場合は「ASP.NET v4.0」)
この人誰?
System.Security.Principal.WindowsPrincipal で、System.Security.Principal.WinsdowsPrincipal.WindowsBuiltInRoleの「User」「Administrator」「Guest」は、いずれもFalseでした。