Не запущен собственный модуль IIS7.5

#c #http #http-headers #iis-7.5 #ihttpmodule

#c #http #http-заголовки #iis-7.5 #ihttpmodule

Вопрос:

Я создал простой 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:WindowsSystem32inetsrv , зарегистрировал модуль и добавил его в список. Однако я не вижу дополнительного заголовка ни в одном из моих запросов. Я создал аналогичный управляемый модуль, установил его в GAC, зарегистрировал, и он работает нормально. Но этот собственный модуль, похоже, ничего не делает. Требуется ли еще один шаг, чтобы заставить собственные модули обрабатывать запросы?

Кроме того, я не уверен, имеет ли это значение, но запросы направляются в ASP.NET сайт. Собственные обработчики не запускаются для ASP.NET ?

Ответ №1:

Если модуль является 32-разрядным модулем, вам необходимо включить 32-разрядные приложения в пул приложений для вашего веб-сайта. Перейдите в пулы приложений, выберите пул для своего веб-сайта, дополнительные настройки и установите для параметра «Включить 32-разрядные приложения» значение TRUE.