Я написал простой управляемый 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");
}
}
}
Запрос достигает точки в конвейере, в котором находится модуль, но просто пропускает модуль. Не отображаются ошибки, и страница отображается в порядке.
заранее спасибо
Как оказалось, мы не включили возможности Windows расширяемости Windows, в результате чего модуль не загружался. К сожалению, IIS позволяет вам добавить к нему управляемый модуль, несмотря на то, что он уверен, что он никогда не сможет его запустить!
Чтобы добавить эти модули в PowerShell, используйте:
Install-WindowsFeature Web-Net-Ext
Install-WindowsFeature Web-Net-Ext45
Иногда пулы каким-то образом повреждаются, воссоздавая пул, возникает такая проблема. Надеюсь, это поможет кому-то.