HttpModule doesn’t seem to work
I’ve created a simple HttpModule to log the uses of my existing webservice. There’s a dll containing a single class
public class TrackingModule : System.Web.IHttpModule { public TrackingModule(){} public void Init(System.Web.HttpApplication context) { context.BeginRequest+=new EventHandler(context_BeginRequest); } public void Dispose() { } private void context_BeginRequest(object sender, EventArgs e) { try { Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish( new Exception("Log attept") ); HttpApplication app = (HttpApplication)sender; string method = app.Request.RawUrl; SaveUseToDatabase( app.Request.UserHostAddress, method ); } catch( Exception ex ) { try { Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish( ex ); } catch{} } } }
After compiling the dll I add it to webservice’s bin folder and in webservice’s web.config I add:
<system.web> <httpModules> <add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule, WebserviceTrackingModule"/>
This works fine on my computer, but when I copy it to production server, nothing happens. No new entries in database, no entries logged by ExceptionManager. As if it’s not there at all.
What can I be missing?
Edit: After performing another test I can add that it works when I add it for a webservice that has it’s own top-level virtual directory. It doesn’t work for webservices that reside in virtual directories that are subfolders of another virtual directory.
I know that HttpModules settings are being inherited by subdirectories, but it looks like the existence of parent directory gets in the way.
Answer
I believe I have found a better solution. Attach the module at runtime instead of in the web config. Check out Rick Strahl’s blog post for the details.