Я создал простой HttpModule для регистрации использования моего существующего веб-сервиса. Есть dll, содержащая один класс
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{}
}
}
}
После компиляции dll я добавляю ее в папку bin веб-сервиса и в web.config веб-сервиса добавляю:
<system.web>
<httpModules>
<add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule, WebserviceTrackingModule"/>
Это прекрасно работает на моем компьютере, но когда я копирую его на рабочий сервер, ничего не происходит. Нет новых записей в базе данных, нет записей, зарегистрированных ExceptionManager. Как будто его там вообще нет.
Чего мне не хватает?
Edit:
После выполнения другого теста я могу добавить, что он работает, когда я добавляю его для веб-службы, которая имеет собственный виртуальный каталог верхнего уровня. Он не работает для веб-сервисов, которые находятся в виртуальных каталогах, которые являются подпапками другого виртуального каталога.
Я знаю, что настройки HttpModules наследуются подкаталогами, но похоже, что существование родительского каталога мешает.