HttpModule в IIS 8.5 не загружается

1

Я написал простой управляемый HttpModule для IIS 8.5 на С# и установил его в кэш глобальной сборки (версия CLR 4.0.30319). Это обнаружено в настоящее время IIS, и я установил его как модуль на уровне хоста приложения.

К сожалению, это, похоже, не выполняется вообще. Мы обслуживаем только статический контент, но поскольку IIS работает в интегрированном режиме, у меня создалось впечатление, что HttpModules были выполнены для всех запросов, а не только в конвейере ASP.NET.

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

using System;
using System.Web;
using System.Collections.Specialized;
using System.IO;

public class ServerLoggingModule : IHttpModule
{
    public ServerLoggingModule()
    {
       using (StreamWriter file = new StreamWriter(@"C:\LocalIISAuth\logs\iis.log"))
       {
           file.WriteLine("Created module");
       }
    }

    public string ModuleName
    {
        get { return "ServerMaskModule"; }
    }

    public void Dispose()
    {
        using (StreamWriter file = new StreamWriter(@"C:\LocalIISAuth\logs\iis.log"))
        {
            file.WriteLine("Disposed of module");
        }    
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(ServerLoggingModule.BeginRequestHandler);
        context.EndRequest += new EventHandler(ServerLoggingModule.EndRequestHandler);
    }

    protected static void BeginRequestHandler(Object sender, EventArgs e)
    {
        using (StreamWriter file = new StreamWriter(@"C:\LocalIISAuth\logs\iis.log"))
        {
            file.WriteLine("BeginRequest");
        }
    }

    protected static void EndRequestHandler(Object sender, EventArgs e)
    {
        using (StreamWriter file = new StreamWriter(@"C:\LocalIISAuth\logs\iis.log"))
        {
            file.WriteLine("EndRequest");
        }
    }
}

Запрос достигает точки в конвейере, в котором находится модуль, но просто пропускает модуль. Не отображаются ошибки, и страница отображается в порядке.

заранее спасибо

  • 0
    Пожалуйста, убедитесь, что ваш HttpModule был добавлен в IIS. Перейдите в IIS -> Ваш веб-сайт -> Модули-> Добавить управляемый модуль и снова нажмите на веб-сайт с запросом.
Теги:
iis
iis-8.5
httpmodule

2 ответа

1
Лучший ответ

Как оказалось, мы не включили возможности Windows расширяемости Windows, в результате чего модуль не загружался. К сожалению, IIS позволяет вам добавить к нему управляемый модуль, несмотря на то, что он уверен, что он никогда не сможет его запустить!

Чтобы добавить эти модули в PowerShell, используйте:

Install-WindowsFeature Web-Net-Ext
Install-WindowsFeature Web-Net-Ext45 
0

Иногда пулы каким-то образом повреждаются, воссоздавая пул, возникает такая проблема. Надеюсь, это поможет кому-то.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню