HttpModule не работает - PullRequest
       11

HttpModule не работает

3 голосов
/ 18 декабря 2008

Я создал простой 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 наследуются подкаталогами, но похоже, что существование родительского каталога мешает.

Ответы [ 4 ]

3 голосов
/ 27 февраля 2009

Я считаю, что нашел лучшее решение. Подключите модуль во время выполнения, а не в веб-конфигурации. Проверьте сообщение в блоге Рика Страля для деталей.

1 голос
/ 19 декабря 2008

ОК, я отвечаю на свой вопрос.

Не работает, когда вы определяете в подкаталоге web.config, даже если подкаталог настроен как приложение. Единственное решение, которое я нашел, - это определить их в теге в web.config корневого приложения (родительского каталога).

Мне не нравится: (

1 голос
/ 26 февраля 2009

Я нашел ответ на этот вопрос в http://forums.iis.net/t/1151924.aspx

да ладно, немного процесс ликвидации никогда не терпит неудачу я.

После взгляда на 3,5, связанных код web.config, я понял, что мой модуль нужно добавить в новый раздел:

вместо system.web ... по крайней мере, это работает сейчас.

Итак, чтобы перевести это:

Если у вас проблема с httphandlers

добавьте ваш обработчик в узел модулей в system.webserver и посмотрите, работает ли он Скопируйте формат, используемый для скриптового модуля.

0 голосов
/ 18 декабря 2008

Это работает?

<add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule" />

И действительно ли метод context_BeginRequest вызывается для каждого запроса?

...