Реализованные события класса IHttpModule не запускаются, проблема с SharePoint 2010

Я разрабатываю веб-приложение Sharepoint 2010. Я хочу обрабатывать некоторые события приложения (Begin_Request, End_Request, Application_Start) классическим способом asp.net, используя Global.asax, унаследованный от SPHttpApplication.

Я нашел двусторонний отличить то.

Первый предлагает перегрузить SPHttpApplication в классе Global. Хорошая идея, но не подходит для меня, потому что мое приложение развернуто на дочернем сайте другого основного сайта. Если есть способ обойти этот момент, это было бы отличным решением!

Второй предлагает реализовать интерфейс IHttpModule и регистрировать события из контекстной переменной HttpApplication. Мне это подходит, и я создал проект библиотеки классов с одним классом, реализующим этот интерфейс. Я также добавил специальную запись в свой файл web.config:

<httpModules>
    <add name="DSModule" type="Artec.DS.HttpContext.DSModule, DSModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94"/>
</httpModules>

где Artec.DS.HttpContext — имя проекта, а DSModule — имя класса. И ведь когда я запускаю отладку, метод Init() не вызывается.

ОБНОВЛЕНИЕ

namespace Artec.DS.HttpContext
{
    public class DSModule : IHttpModule
    {
        public void Dispose()
        {
           throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            System.Diagnostics.Debugger.Launch();

            ApplicationVariables.AppPath = context.Server.MapPath("/");
            NhibernateManager.Init();
            NavigationManager.Init();
        }
    }
}

Прежде всего, мой web.config имеет неправильный атрибут «тип». Меня смутило имя класса вместо имени сборки. Таким образом, правильно сформированный тег выглядит следующим образом:

<add name="DSModule" type="Artec.DS.HttpContext.DSModule, Artec.DS.HttpContext, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94" />

После модификации web.config system.webServer/modules (спасибо CBono) был вызван Init(), и это ответ на мой первоначальный вопрос.

Но теперь я получаю сообщение об ошибке: «System.Web.HttpException: операция сервера недоступна в этом контексте». при попытке сопоставить путь к серверу:

context.Server.MapPath("/")

person Victor Ponamarev    schedule 17.10.2012    source источник
comment
Вы должны выделить это в отдельный вопрос.   -  person CBono    schedule 17.10.2012


Ответы (1)


Перечисленная вами запись web.config подходит, если ваш экземпляр IIS имеет версию 6 или если вы работаете в классическом режиме версии 7.

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

<configuration>
  <system.webServer>
    <modules>
      <add name="DSModule" type="Artec.DS.HttpContext.DSModule, DSModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94"/>
    </modules>
  </system.webServer>
</configuration>

Вполне нормально, если ваш HTTP-модуль зарегистрирован в обоих разделах.

person CBono    schedule 17.10.2012
comment
Спасибо! Ваш совет прямо в точку! Но у меня есть другая проблема с работой сервера, которая недоступна в этом контексте. Также я разместил код. - person Victor Ponamarev; 17.10.2012