IGlobalStopListeningProvider::D rainRequestsGracefully, méthode
Indique si IIS ferme normalement toutes les demandes en attente.
Syntaxe
virtual BOOL DrainRequestsGracefully(
VOID
) const = 0;
Paramètres
Cette méthode ne prend aucun paramètre.
Valeur renvoyée
true
si IIS ferme correctement les requêtes actuelles ; sinon, false
.
Remarques
La DrainRequestsGracefully
méthode récupère des informations sur la façon dont IIS va fermer toutes les demandes en attente lorsqu’un processus de travail s’arrête. Par exemple, si IIS est redémarré, la DrainRequestsGracefully
méthode retourne false
, car toutes les demandes en attente seront arrêtées. Toutefois, si un pool d’applications est recyclé, la DrainRequestsGracefully
méthode retourne true
, car toutes les demandes en attente sur le processus de travail qui s’arrête le seront normalement.
Exemple
L’exemple de code suivant montre comment créer un module HTTP qui effectue les tâches suivantes :
S’inscrit pour la notification GL_STOP_LISTENING .
Crée une classe CGlobalModule qui contient une méthode OnGlobalStopListening . Cette méthode effectue les tâches suivantes :
Récupère les status qu’IIS utilisera pour fermer les requêtes actuelles à l’aide de la
DrainRequestsGracefully
méthode .Met en forme une chaîne qui contient les informations status.
Écrit la chaîne en tant qu’événement dans le journal des applications du observateur d'événements.
Supprime la classe de la
CGlobalModule
mémoire, puis se ferme.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:
// Process a GL_STOP_LISTENING notification.
GLOBAL_NOTIFICATION_STATUS
OnGlobalStopListening(
IN IGlobalStopListeningProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Create a string buffer.
char szBuffer[256] = "";
// Retrieve the Boolean value and format the string.
sprintf_s(szBuffer,255,"Drain Requests Gracefully: %s",
(TRUE==pProvider->DrainRequestsGracefully())?"Yes":"No");
// Write the string to the event viewer.
WriteEventViewerLog(szBuffer);
// Continue processing.
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" );
}
~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;
// Define a method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR szNotification)
{
// 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, 1, 0, &szNotification, 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_STOP_LISTENING );
}
Votre module doit exporter la fonction RegisterModule . Vous pouvez exporter cette fonction en créant un fichier de définition de module (.def) pour votre projet, ou vous pouvez compiler le module à l’aide du /EXPORT:RegisterModule
commutateur . Pour plus d’informations, consultez Procédure pas à pas : création d’un module HTTP Request-Level à l’aide de code natif.
Vous pouvez éventuellement compiler le code à l’aide de la __stdcall (/Gz)
convention d’appel au lieu de déclarer explicitement la convention d’appel pour chaque fonction.
Spécifications
Type | Description |
---|---|
Client | - IIS 7.0 sur Windows Vista - IIS 7.5 sur Windows 7 - IIS 8.0 sur Windows 8 - IIS 10.0 sur Windows 10 |
Serveur | - IIS 7.0 sur Windows Server 2008 - IIS 7.5 sur Windows Server 2008 R2 - IIS 8.0 sur Windows Server 2012 - IIS 8.5 sur Windows Server 2012 R2 - IIS 10.0 sur Windows Server 2016 |
Produit | - 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 |
En-tête | Httpserv.h |