IHttpModuleRegistrationInfo::SetPriorityForRequestNotification (Método)
Establece la prioridad de nivel de solicitud para un módulo.
Sintaxis
virtual HRESULT SetPriorityForRequestNotification(
IN DWORD dwRequestNotification,
IN PCWSTR pszPriority
) = 0;
Parámetros
dwRequestNotification
[IN] Valor de máscara de bits que contiene las notificaciones de solicitud que se van a establecer para el nivel de prioridad. (Definido en Httpserv.h).)
pszPriority
[IN] Puntero a una cadena que contiene el alias de prioridad. (Definido en Httpserv.h).)
Valor devuelto
Una clase HRESULT
. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.
Valor | Descripción |
---|---|
S_OK | Indica que la operación se realizó correctamente. |
Comentarios
El SetPriorityForRequestNotification
método establece el nivel de prioridad para una lista de notificaciones de nivel de solicitud para las que se ha registrado un módulo HTTP. IIS usa el nivel de prioridad para determinar el orden dentro de una notificación de que se deben organizar los módulos. Los niveles de prioridad se invierten para las notificaciones de CHttpModule::OnSendResponse . Por ejemplo, un módulo HTTP que se ha registrado para la notificación CHttpModule::OnBeginRequest mediante el PRIORITY_ALIAS_HIGH
alias se priorizaría antes de un módulo que se haya registrado para la OnBeginRequest
notificación mediante el PRIORITY_ALIAS_LOW
alias . Un módulo HTTP que se haya registrado para la OnSendResponse
notificación mediante el PRIORITY_ALIAS_HIGH
alias se ejecutaría después de un módulo que se haya registrado para la OnSendResponse
notificación mediante el PRIORITY_ALIAS_LOW
alias .
Nota:
Los valores de máscara de bits para las notificaciones de nivel de solicitud y los alias de prioridad se definen en el archivo Httpserv.h.
Nota
Los niveles de prioridad se invierten para RQ_SEND_RESPONSE
las notificaciones.
Ejemplo
En el ejemplo siguiente se muestra cómo crear un módulo HTTP que use la función RegisterModule y los métodos siguientes para registrar un módulo para las notificaciones de nivel global y de nivel de solicitud.
El método SetRequestNotifications registra una clase CHttpModule para una notificación onBeginRequest de nivel de solicitud.
El
SetPriorityForRequestNotification
método establece la prioridad del módulo para las notificaciones de nivel de solicitud.El método SetGlobalNotifications registra una clase CGlobalModule para una notificación onGlobalPreBeginRequest de nivel global.
El método SetPriorityForGlobalNotification establece la prioridad del módulo para la notificación de nivel global.
El módulo responde a las notificaciones registradas y escribe entradas en el registro de la aplicación en el Visor de eventos.
Nota
Las entradas del Visor de eventos mostrarán "IISADMIN" como origen del evento.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create a global handle for the Event Viewer.
HANDLE g_hEventLog;
// Define the method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR szBuffer[], WORD wNumStrings);
// Create the HTTP module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pHttpContext );
UNREFERENCED_PARAMETER( pProvider );
// Create an array of strings.
LPCSTR szBuffer[2] = {"MyHttpModule","OnBeginRequest"};
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,2);
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
};
// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:
GLOBAL_NOTIFICATION_STATUS
OnGlobalPreBeginRequest(
IN IPreBeginRequestProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Create an array of strings.
LPCSTR szBuffer[2] = {"MyGlobalModule","OnGlobalPreBeginRequest"};
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,2);
// Return processing to the pipeline.
return GL_NOTIFICATION_CONTINUE;
}
VOID Terminate()
{
// Remove the class from memory.
delete this;
}
MyGlobalModule()
{
// Open a handle to the Event Viewer.
g_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
}
~MyGlobalModule()
{
// Test whether the handle for the Event Viewer is open.
if (NULL != g_hEventLog)
{
DeregisterEventSource( g_hEventLog );
g_hEventLog = NULL;
}
}
};
// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER( pAllocator );
// Create a new instance.
MyHttpModule * pModule = new MyHttpModule;
// Test for an error.
if (!pModule)
{
// Return an error if the factory cannot create the instance.
return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
}
else
{
// Return a pointer to the module.
*ppModule = pModule;
pModule = NULL;
// Return a success status.
return S_OK;
}
}
void Terminate()
{
// Remove the class from memory.
delete this;
}
};
// Define a method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR szBuffer[], WORD wNumStrings)
{
// Test whether the handle for the Event Viewer is open.
if (NULL != g_hEventLog)
{
// Write any strings to the Event Viewer and return.
return ReportEvent(
g_hEventLog,
EVENTLOG_INFORMATION_TYPE,
0, 0, NULL, wNumStrings,
0, szBuffer, NULL );
}
return FALSE;
}
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Set the request notifications.
hr = pModuleInfo->SetRequestNotifications(
new MyHttpModuleFactory,
RQ_BEGIN_REQUEST, 0 );
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Set the request priority.
hr = pModuleInfo->SetPriorityForRequestNotification(
RQ_BEGIN_REQUEST,PRIORITY_ALIAS_MEDIUM);
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Create an instance of the global module class.
MyGlobalModule * pGlobalModule = new MyGlobalModule;
// Test for an error.
if (NULL == pGlobalModule)
{
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
}
// Set the global notifications.
hr = pModuleInfo->SetGlobalNotifications(
pGlobalModule, GL_PRE_BEGIN_REQUEST );
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Set the global priority.
hr = pModuleInfo->SetPriorityForGlobalNotification(
GL_PRE_BEGIN_REQUEST,PRIORITY_ALIAS_LOW);
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Return a success status;
return S_OK;
}
El módulo debe exportar la RegisterModule
función. Puede exportar esta función mediante la creación de un archivo de definición de módulo (.def) para el proyecto, o bien puede compilar el módulo mediante el /EXPORT:RegisterModule
modificador . Para obtener más información, vea Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo.
Opcionalmente, puede compilar el código mediante la __stdcall (/Gz)
convención de llamada en lugar de declarar explícitamente la convención de llamada para cada función.
Requisitos
Tipo | Descripción |
---|---|
Remoto | - IIS 7.0 en Windows Vista - IIS 7.5 en Windows 7 - IIS 8.0 en Windows 8 - IIS 10.0 en Windows 10 |
Servidor | - IIS 7.0 en Windows Server 2008 - IIS 7.5 en Windows Server 2008 R2 - IIS 8.0 en Windows Server 2012 - IIS 8.5 en Windows Server 2012 R2 - IIS 10.0 en Windows Server 2016 |
Producto | - IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0 - IIS Express 7.5, IIS Express 8.0, IIS Express 10.0 |
Encabezado | Httpserv.h |
Consulte también
IHttpModuleRegistrationInfo (Interfaz)
IHttpModuleRegistrationInfo::SetGlobalNotifications (Método)
IHttpModuleRegistrationInfo::SetPriorityForGlobalNotification (Método)
IHttpModuleRegistrationInfo::SetRequestNotifications (Método)
PFN_REGISTERMODULE (Función)