Собственный модуль IIS7.5 не работает
Я создал простой CHttpModule
это добавляет пользовательский заголовок ко всем запросам:
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
class AppendHeaderModule : public CHttpModule {
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER(pProvider);
PCSTR testHeaderName = "Foo";
PCSTR testHeader = "bar";
pHttpContext->GetResponse()->SetHeader(testHeaderName, testHeader, (USHORT)strlen(testHeader), true);
return RQ_NOTIFICATION_CONTINUE;
}
VOID Terminate() {
delete this;
}
AppendHeaderModule() { }
~AppendHeaderModule() { }
};
class AppendHeaderModuleFactory : public IHttpModuleFactory {
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER(pAllocator);
AppendHeaderModule* pModule = new AppendHeaderModule;
if (!pModule) {
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
}
else {
*ppModule = pModule;
pModule = NULL;
return S_OK;
}
}
void Terminate() {
delete this;
}
};
HRESULT __stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER(dwServerVersion);
UNREFERENCED_PARAMETER(pGlobalInfo);
AppendHeaderModuleFactory* pModule = new AppendHeaderModuleFactory;
if (pModule == NULL)
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
return pModuleInfo->SetRequestNotifications(pModule, RQ_BEGIN_REQUEST, 0);
}
Я скопировал это в C:\Windows\System32\inetsrv
, зарегистрировал модуль и добавил его в список. Однако я не вижу дополнительного заголовка ни в одном из моих запросов. Я создал аналогичный управляемый модуль, установил его в GAC, зарегистрировал, и он отлично работает. Но этот родной модуль, похоже, ничего не делает. Есть ли еще один шаг, необходимый для получения собственных модулей для обработки запросов?
Кроме того, я не уверен, имеет ли это значение, но запросы направляются на сайт ASP.NET. Не работают ли собственные обработчики для ASP.NET?
1 ответ
Если модуль представляет собой 32-разрядный модуль, необходимо включить 32-разрядные приложения в пуле приложений для вашего веб-сайта. Перейдите в пулы приложений, выберите пул для своего веб-сайта, Дополнительные параметры и установите "Включить 32-разрядные приложения в значение ИСТИНА".