I’ve been writing an Error Hander HttpModule for a current ASP.NET WebForm project and things were going well until my last merge with TFS. All of a sudden, my HttpModule wouldn’t register anymore.
For the life of me I couldn't’ figure out what had changed. I spent half the day trying to figure out what in the world was going on.
Here is the chain of events that I tried before finding the actual solution. If you want, you can just skip to the end to find the answer :)
First, I decided to strongly sign the assembly with the HttpModule (even thought it wasn’t necessary previously)…
So, I created a new Strong Name Key from the properties window of my HttpModule project from Visual Studio 2008

sn –T ErrorFramework.dll
Note: You might consider integrating this command into a Get Public Key Token External Tool in Visual Studio 2008.
Here is what my original web.config entry looked like before:
<add name="ExceptionModule" type="ErrorFramework.ExceptionModule, ErrorFramework" />
and after all of the above steps I was able to update my web.config to the following:
<add name="ExceptionModule" type="ErrorFramework.ExceptionModule, ErrorFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7125b1d9a03db888" />
However, to my dismay the HttpModule still did not register!
Secondly, I tried dynamically registering my HttpModule in the Global.asax instead of relying upon the web.config.
namespace ErrorFramework { public class Global : System.Web.HttpApplication { public static ExceptionModule errorModule = new ExceptionModule(); public override void Init() { base.Init(); exceptionModule.Init(this); } } }
This thankfully worked fine, but I really wanted the web.config option to work so that I could add or remove the HttpModule at will without having to change and recompile code.
Thirdly, I decided to use Visual Studio’s internal webserver (Cassini).
To my surprise the HttpModule started to work again! Although, I was excited that it worked… I was also very confused because I thought it should work through IIS7 as well. So, back to the drawing board.
Fourthly, I finally found the answer I was looking for.
Apparently, IIS7 looks in the system.webSever/modules section of the web.config and not in the system.web/httpModules section like IIS5 & IIS6. It turns out that the web.config that our project has both sections defined in the config file!
So, instead of this…
<system.web> <!-- Misc XML --> <httpModules> <add name="ExceptionModule" type="ErrorFramework.ExceptionModule, SG.SSP.Darwin.WebPortalFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7125b1d9a03db888" /> </httpModules> <!-- Misc XML --> </system.web>
I needed to do this…
<system.webServer> <!-- Misc XML --> <modules> <add name="ExceptionModule" type="ErrorFramework.ExceptionModule, SG.SSP.Darwin.WebPortalFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7125b1d9a03db888" /> </modules> <!-- Misc XML --> </system.webServer>
Note: If you want it to work both on IIS7 and through Cassini, then you’ll need to define it in both places ;)
No comments:
Post a Comment