IIS7 Custom HttpModule для веб-сайта - Как - PullRequest
0 голосов
/ 05 ноября 2011

Я искал в Интернете примеры того, как создать HttpModule, так как я хотел использовать один на веб-сайте, я занимаюсь разработкой банкомата. все примеры, которые я нашел, выглядели довольно просто, но сложнее для реализации, чем я думал в начале.

Вот пример HttpModule:

public class SampleModule : IHttpModule
{
    DateTime beginrequest;
    public void Init(HttpApplication app)
    {
        // register for events created by the pipeline 
        app.BeginRequest += new EventHandler(this.OnBeginRequest);
        app.EndRequest += new EventHandler(this.OnEndRequest);
    }
    public void Dispose() { }
    public void OnBeginRequest(object o, EventArgs args)
    {
        // obtain the time of the current request 
        beginrequest = DateTime.Now;
    }
    public void OnEndRequest(object o, EventArgs args)
    {
        // get the time elapsed for the request 
        TimeSpan elapsedtime = DateTime.Now - beginrequest;
        // get access to application object and the context object 
        HttpApplication app = (HttpApplication)o;
        HttpContext ctx = app.Context;
        // add header to HTTP response 
        ctx.Response.AppendHeader("ElapsedTime", elapsedtime.ToString());
    }
}

реализация модуля должна быть такой (по всем примерам, которые я нашел):

<configuration> 
    <system.web> 
        <httpModules> 
            <add name="TimeElapsedModule" type="SampleModules.SampleModule,SampleModules "/> 
        </httpModules> 
    </system.web> 
</configuration>

но это неправильно для IIS7! в IIS7 вы должны сделать:

  <system.webServer>
      <modules>
          <add name="TimeElapsedModule" type="SampleModules.SampleModule,SampleModules"/>
      </modules>
  </system.webServer>

Теперь, выяснив это, я столкнулся с другой проблемой, решение которой, похоже, не нашел. я получаю следующую ошибку:

Could not load file or assembly 'SampleModules' or one of its dependencies. The system cannot find the file specified. 

что логично, так как мой модуль живет внутри другого класса. Я был бы счастлив, если бы кто-то мог помочь мне решить эту проблему, и я надеюсь, что этот пост поможет коллегам-программистам в их день нужды.

1 Ответ

0 голосов
/ 05 ноября 2011

Оказывается, для типа я использовал пространство имен вместо имени класса, указанного в пространстве имен.Другими словами, в моем файле web.config вместо

<add type="Test.SampleModules.SampleModule,App_Code" name="TimeElapsedModule" />
было
<add type="SampleModules.SampleModule,SampleModules" name="TimeElapsedModule" />

...