IHttpServer::D oCacheOperation, méthode
Effectue une opération de cache spécifique.
Syntaxe
virtual HRESULT DoCacheOperation(
IN CACHE_OPERATION cacheOperation,
IN IHttpCacheKey* pCacheKey,
OUT IHttpCacheSpecificData** ppCacheSpecificData,
IN IHttpTraceContext* pHttpTraceContext = NULL
) = 0;
Paramètres
cacheOperation
[IN] Valeur d’énumération CACHE_OPERATION .
pCacheKey
[IN] Pointeur vers une interface IHttpCacheKey .
ppCacheSpecificData
[OUT] Pointeur vers l’adresse d’une interface IHttpCacheSpecificData .
pHttpTraceContext
[IN] Pointeur vers une interface IHttpTraceContext . (Facultatif.)
Valeur renvoyée
Élément HRESULT
. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.
Valeur | Description |
---|---|
S_OK | Indique que l’opération a réussi. |
Remarques
La DoCacheOperation
méthode est utilisée dans les modules HTTP pour effectuer l’opération de cache spécifiée par le cacheOperation
paramètre . Par exemple, les valeurs d’énumération CACHE_OPERATION_ADD et CACHE_OPERATION_DELETE stockent ou suppriment des objets, respectivement, du cache. Lorsque votre module appelle la DoCacheOperation
méthode, il doit passer une IHttpCacheKey
interface dans le pCacheKey
paramètre, et IIS retourne une IHttpCacheSpecificData
interface dans le ppCacheSpecificData
paramètre. Vous pouvez éventuellement spécifier une IHttpTraceContext
interface dans le pHttpTraceContext
paramètre pour identifier la demande qui a déclenché l’appel. (Cela n’est nécessaire qu’à des fins de suivi.)
Notes
Les implémenteurs ne doivent pas appeler DoCacheOperation à l’intérieur de la méthode IHttpApplicationResolveModulesProvider::RegisterModule , car il est trop tôt dans le pipeline de requête.
Exemple
L’exemple de code suivant montre comment utiliser la DoCacheOperation
méthode pour créer un module HTTP qui teste une opération de CACHE_OPERATION_RETRIEVE et déclenche une opération de CACHE_OPERATION_ENUM .
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
IHttpServer * g_pGlobalInfo;
// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:
GLOBAL_NOTIFICATION_STATUS
OnGlobalCacheOperation(
IN ICacheProvider * pProvider
)
{
if (CACHE_OPERATION_RETRIEVE == pProvider->GetCacheOperation())
{
// Retrieve an IHttpCacheKey interface.
IHttpCacheKey * pCacheKey = pProvider->GetCacheKey();
// Test for an error.
if (NULL == pCacheKey) return GL_NOTIFICATION_CONTINUE;
// Initialize an IHttpCacheSpecificData interface pointer.
IHttpCacheSpecificData * pCacheSpecificData = NULL;
// Peform a cache enumeration operation.
HRESULT hr = g_pGlobalInfo->DoCacheOperation(
CACHE_OPERATION_ENUM,pCacheKey,&pCacheSpecificData,NULL);
// Test for an error.
if (FAILED(hr)) return GL_NOTIFICATION_HANDLED;
}
// Return processing to the pipeline.
return GL_NOTIFICATION_CONTINUE;
}
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 );
g_pGlobalInfo = 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_CACHE_OPERATION );
}
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 |
Voir aussi
IHttpServer Interface
CACHE_OPERATION, énumération
IHttpCacheKey, interface
IHttpCacheSpecificData, interface
IHttpTraceContext, interface