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.
Ruft eine IHttpApplication-Schnittstelle ab .
Syntax
virtual IHttpApplication* GetApplication(
VOID
) = 0;
Parameter
Diese Methode nimmt zwei Parameter entgegen.
Rückgabewert
Ein Zeiger auf eine IHttpApplication
-Schnittstelle.
Bemerkungen
Entwickler können die GetApplication
-Methode verwenden, um eine IHttpApplication
Schnittstelle abzurufen, die sie dann zum Abrufen von Konfigurationsinformationen für eine Anwendung verwenden können.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie ein HTTP-Modul erstellt wird, das die folgenden Aufgaben ausführt:
Registriert sich für die GL_THREAD_CLEANUP-Benachrichtigung .
Erstellt eine CGlobalModule-Klasse , die eine OnGlobalThreadCleanup-Methode enthält. Diese Methode führt die folgenden Tasks aus:
Ruft eine
IHttpApplication
Schnittstelle mithilfe derGetApplication
-Methode ab.Ruft den Anwendungsbezeichner der Anwendung des aktuellen Kontexts mithilfe der IHttpApplication::GetApplicationId-Methode ab.
Schreibt die Anwendungsbezeichnerinformationen als Ereignis in das Anwendungsprotokoll des Ereignisanzeige.
Entfernt die
CGlobalModule
-Klasse aus dem Arbeitsspeicher und wird dann beendet.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:
GLOBAL_NOTIFICATION_STATUS
OnGlobalThreadCleanup(
IN IGlobalThreadCleanupProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Retrieve a pointer to the IHttpApplication class.
IHttpApplication * pHttpApplication =
pProvider->GetApplication();
// Retrieve a pointer to the application configuration path.
PCWSTR pwszApplicationId = pHttpApplication->GetApplicationId();
// Test for an error.
if (m_pHttpContext!=NULL)
{
// Allocate space for the user name.
char * pszBuffer = (char*) m_pHttpContext->AllocateRequestMemory(
(DWORD) wcslen(pwszApplicationId)+1 );
// Test for an error.
if (pszBuffer!=NULL)
{
// Return the user information to the Web client.
wcstombs(pszBuffer,pwszApplicationId,wcslen(pwszApplicationId));
// Create an array of strings.
LPCSTR szBuffer[3] = {"OnGlobalThreadCleanup",
"Application ID:",pszBuffer};
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,3);
}
}
// Return processing to the pipeline.
return GL_NOTIFICATION_CONTINUE;
}
GLOBAL_NOTIFICATION_STATUS
OnGlobalPreBeginRequest(
IN IPreBeginRequestProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Retrieve a pointer to the context.
m_pHttpContext = pProvider->GetHttpContext();
// 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.
m_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
// Initialize the context pointer to NULL.
m_pHttpContext = NULL;
}
~MyGlobalModule()
{
// Test whether the handle for the Event Viewer is open.
if (NULL != m_hEventLog)
{
// Close the handle to the Event Viewer.
DeregisterEventSource( m_hEventLog );
m_hEventLog = NULL;
}
}
private:
// Create a handle for the event viewer.
HANDLE m_hEventLog;
// Create a pointer for the module context.
IHttpContext * m_pHttpContext;
// Define a method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR * lpStrings, WORD wNumStrings)
{
// Test whether the handle for the Event Viewer is open.
if (NULL != m_hEventLog)
{
// Write any strings to the Event Viewer and return.
return ReportEvent(
m_hEventLog, EVENTLOG_INFORMATION_TYPE,
0, 0, NULL, wNumStrings, 0, lpStrings, 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 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 and exit.
return pModuleInfo->SetGlobalNotifications(
pGlobalModule, GL_THREAD_CLEANUP | GL_PRE_BEGIN_REQUEST );
}
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 optional 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 |
Weitere Informationen
IHttpApplication-Schnittstelle
IGlobalThreadCleanupProvider-Schnittstelle