Partager via


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