IHttpContext::D isableNotifications-Methode
Deaktiviert bestimmte Benachrichtigungen, die für diese Anforderung im aktuellen Modul ausstehen.
Syntax
virtual VOID DisableNotifications(
IN DWORD dwNotifications,
IN DWORD dwPostNotifications
) = 0;
Parameter
dwNotifications
[IN] Eine DWORD
, die eine Bitmaske enthält, die die Anforderungsbenachrichtigungen angibt, die für dieses Modul deaktiviert werden sollen.
dwPostNotifications
[IN] Eine DWORD
, die eine Bitmaske enthält, die die nach der Anforderung zu deaktivierenden Benachrichtigungen für dieses Modul angibt.
Rückgabewert
VOID
.
Bemerkungen
Sie können die DisableNotifications
-Methode verwenden, um anzugeben, welche Benachrichtigungen oder Benachrichtigungen nach der Anforderung sie für die aktuelle Anforderung deaktivieren möchten. Wenn beispielsweise ein Modul, das Sie erstellen, für die RQ_AUTHENTICATE_REQUEST und RQ_AUTHORIZE_REQUEST Benachrichtigungen registriert wurde, kann Ihr Modul so konfiguriert werden, dass die RQ_AUTHORIZE_REQUEST
Benachrichtigung basierend auf bedingungen ignoriert wird, die in der RQ_AUTHENTICATE_REQUEST
Benachrichtigung verarbeitet werden.
Hinweis
Benachrichtigungen können nur für die aktuelle Anforderung und im aktuellen Modul deaktiviert werden. Die einzige Möglichkeit zum Deaktivieren von Benachrichtigungen, die in anderen Modulen implementiert sind, wäre , RQ_NOTIFICATION_FINISH_REQUEST aus Ihrem Modul zurückzugeben.
Hinweis
Benachrichtigungen können nur für deterministische Ereignisse deaktiviert werden. sie können nicht für nichtdeterministische Ereignisse deaktiviert werden. Weitere Informationen finden Sie unter Vergleichen von Native-Code und Managed-Code Benachrichtigungen.
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie Sie mithilfe der DisableNotifications
-Methode ein HTTP-Modul erstellen, das eine ausstehende CHttpModule::OnPostBeginRequest-Benachrichtigung für die aktuelle Anforderung deaktiviert.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Clear the existing response.
pHttpContext->GetResponse()->Clear();
// Set the MIME type to plain text.
pHttpContext->GetResponse()->SetHeader(
HttpHeaderContentType,"text/plain",
(USHORT)strlen("text/plain"),TRUE);
// Return a message to the client to indiciate the notification.
WriteResponseMessage(pHttpContext,
"\nNotification: ","OnBeginRequest");
// Buffer to store the byte count.
DWORD cbSent = 0;
// Flush the response.
pHttpContext->GetResponse()->Flush(false,true,&cbSent,NULL);
// Specify which notifications to disable.
// (Defined in the Httpserv.h file.)
pHttpContext->DisableNotifications(RQ_BEGIN_REQUEST, 0);
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
REQUEST_NOTIFICATION_STATUS
OnPostBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Return a message to the client to indiciate the notification.
WriteResponseMessage(pHttpContext,
"\nNotification: ","OnPostBeginRequest");
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
REQUEST_NOTIFICATION_STATUS
OnAcquireRequestState(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Return a message to the client to indiciate the notification.
WriteResponseMessage(pHttpContext,
"\nNotification: ","OnAcquireRequestState");
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
private:
// Create a utility method that inserts a name/value pair into the response.
HRESULT WriteResponseMessage(
IHttpContext * pHttpContext,
PCSTR pszName,
PCSTR pszValue
)
{
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Create a data chunk.
HTTP_DATA_CHUNK dataChunk;
// Set the chunk to a chunk in memory.
dataChunk.DataChunkType = HttpDataChunkFromMemory;
// Buffer for bytes written of data chunk.
DWORD cbSent;
// Set the chunk to the first buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszName;
// Set the chunk size to the first buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszName);
// Insert the data chunk into the response.
hr = pHttpContext->GetResponse()->WriteEntityChunks(
&dataChunk,1,FALSE,TRUE,&cbSent);
// Test for an error.
if (FAILED(hr))
{
// Return the error status.
return hr;
}
// Set the chunk to the second buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszValue;
// Set the chunk size to the second buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszValue);
// Insert the data chunk into the response.
hr = pHttpContext->GetResponse()->WriteEntityChunks(
&dataChunk,1,FALSE,TRUE,&cbSent);
// Test for an error.
if (FAILED(hr))
{
// Return the error status.
return hr;
}
// Return a success status.
return S_OK;
}
};
// 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;
}
};
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Set the request notifications and exit.
return pModuleInfo->SetRequestNotifications(
new MyHttpModuleFactory,
RQ_BEGIN_REQUEST | RQ_ACQUIRE_REQUEST_STATE,
RQ_BEGIN_REQUEST
);
}
Ihr Modul muss die Funktion RegisterModule exportieren. Sie können diese Funktion exportieren, indem Sie eine Moduldefinitionsdatei (.def) für Ihr Projekt erstellen, oder Sie können das Modul mithilfe des /EXPORT:RegisterModule
Switches kompilieren. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Request-Level HTTP-Moduls mithilfe von nativem Code.
Sie können den Code optional kompilieren, indem Sie die __stdcall (/Gz)
aufrufende Konvention verwenden, anstatt die aufrufende Konvention für jede Funktion explizit zu deklarieren.
Anforderungen
type | BESCHREIBUNG |
---|---|
Client | – IIS 7.0 unter Windows Vista – IIS 7.5 unter Windows 7 – IIS 8.0 unter Windows 8 – IIS 10.0 auf Windows 10 |
Server | – IIS 7.0 unter Windows Server 2008 – IIS 7.5 unter Windows Server 2008 R2 – IIS 8.0 unter Windows Server 2012 – IIS 8.5 unter Windows Server 2012 R2 – IIS 10.0 auf Windows Server 2016 |
Produkt | – 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 |
Header | Httpserv.h |
Weitere Informationen
IHttpContext-Schnittstelle
IHttpContext::GetIsLastNotification-Methode
IHttpContext::GetNextNotification-Methode
PFN_REGISTERMODULE-Funktion