Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gibt an, dass die Handler für die aktuelle Anforderung abgeschlossen sind.
Syntax
virtual VOID SetRequestHandled(
VOID
) = 0;
Parameter
Diese Methode nimmt zwei Parameter entgegen.
Rückgabewert
VOID
.
Bemerkungen
Die SetRequestHandled
-Methode gibt an, dass die Verarbeitung der Handler für die aktuelle Anforderung abgeschlossen ist. Wenn beispielsweise mehrere Anforderungshandler für einen bestimmten Dateityp konfiguriert sind, können Sie die SetRequestHandled
-Methode verwenden, um anzugeben, dass die Verarbeitung für die aktuelle Anforderung abgeschlossen ist und dass keine zusätzlichen Handler ausgeführt werden sollen.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie ein HTTP-Modul erstellt wird, das die folgenden Aufgaben ausführt:
Das Modul registriert sich für die RQ_PRE_EXECUTE_REQUEST_HANDLER-Benachrichtigung .
Das Modul erstellt eine CHttpModule-Klasse , die eine OnPreExecuteRequestHandler-Methode enthält.
Wenn ein Webclient eine URL anfordert, ruft IIS die -Methode des Moduls
OnPreExecuteRequestHandler
auf. Diese Methode führt die folgenden Aufgaben aus:Ruft einen Zeiger auf eine IScriptMapInfo-Schnittstelle ab.
Ruft den Skripthandler für die Anforderung mithilfe der IScriptMapInfo::GetScriptProcessor-Methode ab.
Wenn die Anforderung für eine ASP-Seite gilt, gibt eine Meldung an den Webclient zurück, dass die Anforderung verarbeitet wurde, und ruft dann die
SetRequestHandled
-Methode auf, um die Anforderung als verarbeitet festzulegen.
Das Modul entfernt die
CHttpModule
-Klasse aus dem Arbeitsspeicher und beendet dann.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnPreExecuteRequestHandler(
IN IHttpContext* pHttpContext,
IN IHttpEventProvider* pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Retrieve an IScriptMapInfo interface.
IScriptMapInfo * pScriptMapInfo = pHttpContext->GetScriptMap();
// Test for an error.
if (NULL != pScriptMapInfo)
{
// Create buffers to store the script processor path.
PCWSTR pwszScriptProcessor;
DWORD cchScriptProcessor = 0;
// Retrieve the script processor.
pwszScriptProcessor =
pScriptMapInfo->GetScriptProcessor(&cchScriptProcessor);
// Test for an error.
if ((pwszScriptProcessor != NULL) && (cchScriptProcessor > 0))
{
// Test for an ASP request.
if (NULL != wcsstr(pwszScriptProcessor,L"\\asp.dll"))
{
// 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 status message.
WriteResponseMessage(pHttpContext,
"ASP requests have been handled.");
// Indicate that handlers for this request have completed.
pHttpContext->SetRequestHandled();
}
}
}
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
private:
// Create a utility method that inserts a string value into the response.
HRESULT WriteResponseMessage(
IHttpContext * pHttpContext,
PCSTR pszBuffer
)
{
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Create a data chunk. (Defined in the Http.h file.)
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 buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszBuffer;
// Set the chunk size to the buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszBuffer);
// 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 we 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_PRE_EXECUTE_REQUEST_HANDLER,
0
);
}
Ihr Modul muss die RegisterModule-Funktion 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 Schalters /EXPORT:RegisterModule
kompilieren. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Request-Level HTTP-Moduls mithilfe von nativem Code.
Sie können den Code kompilieren, indem Sie die __stdcall (/Gz)
Aufrufkonvention verwenden, anstatt die Aufrufkonvention 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 unter 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 unter 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 |