Condividi tramite


Progettazione di moduli HTTP Native-Code

I moduli HTTP in IIS 7 consentono agli sviluppatori di estendere o sostituire le funzionalità principali di IIS. Ad esempio, è possibile scrivere un modulo di autenticazione digest che sostituisce il modulo incluso in IIS 7. Sebbene alcune delle funzionalità fornite dai moduli di codice nativo siano simili a quelle disponibili in precedenza con i filtri ISAPI, i moduli di codice nativo sono progettati in modo diverso e offrono un set di funzionalità molto più completo rispetto ai filtri ISAPI.

Requisiti per i moduli HTTP di Native-Code

Aggiunta di una funzione di registrazione esportata

I moduli HTTP sono necessari per esportare una funzione RegisterModule . È possibile esportare questa funzione creando un file di definizione del modulo (def) per il progetto oppure compilare il modulo usando l'opzione /EXPORT:RegisterModule .

Specifica delle notifiche e della priorità del modulo

Quando si crea la funzione RegisterModule, si specifica una bitmask che contiene un elenco di notifiche che il modulo al livello di richiesta elaborerà (per ulteriori informazioni, vedere Costanti di elaborazione delle richieste). Ad esempio, un modulo a livello di richiesta potrebbe specificare che fornirà metodi per elaborare la notifica RQ_BEGIN_REQUEST e la notifica RQ_MAP_PATH di post-notifica. Analogamente, un modulo a livello globale potrebbe specificare che fornirà metodi per elaborare il GL_APPLICATION_START e le notifiche di GL_APPLICATION_STOP .

La RegisterModule funzione consente anche di specificare la priorità per il modulo. Le priorità disponibili sono PRIORITY_ALIAS_FIRST, PRIORITY_ALIAS_HIGH, PRIORITY_ALIAS_MEDIUM, PRIORITY_ALIAS_LOWe PRIORITY_ALIAS_LAST. Quando i moduli vengono registrati, vengono elaborati in ordine di impostazioni di priorità e configurazione. Ad esempio, se si crea un modulo HTTP che esegue la registrazione come modulo con priorità media, il modulo non verrà elaborato fino a quando non vengono elaborati tutti i moduli con priorità alta. È possibile configurare il modulo da elaborare prima di altri moduli con priorità media e il modulo verrà elaborato prima di qualsiasi modulo con priorità bassa.

Annotazioni

L'ordine dei livelli di priorità viene invertito per le notifiche RQ_SEND_RESPONSE.

Creazione di moduli Request-Level

Creazione di una factory di moduli

I moduli a livello di richiesta a livello di codice nativo devono fornire una factory del modulo che crea un'istanza della classe CHttpModule . La fabbrica del modulo erediterà dall'interfaccia IHttpModuleFactory.

Per altre informazioni su come creare una factory di moduli, vedere l'esempio di codice in Procedura dettagliata: Creazione di un modulo HTTP Request-Level tramite codice nativo.

Creazione di una classe derivata da CHttpModule

La funzionalità di elaborazione principale per i moduli HTTP a livello di richiesta viene fornita tramite un modulo derivato dalla classe base CHttpModule . Questa classe deve contenere un metodo di callback per ogni notifica o post-notifica elencata nella RegisterModule funzione. Ad esempio, se il modulo è registrato per la notifica RQ_AUTHENTICATE_REQUEST e la RQ_AUTHORIZE_REQUEST post notifica, la classe deve contenere i metodi OnAuthenticateRequest e OnPostAuthorizeRequest.

Restituire dai metodi CHttpModule

Al termine dell'elaborazione dei metodi nella CHttpModule classe, ogni metodo deve restituire un valore di enumerazione REQUEST_NOTIFICATION_STATUS. Questo valore determina il modo in cui IIS gestirà la condizione di uscita dei metodi della classe. Ad esempio, un valore restituito di RQ_NOTIFICATION_CONTINUE informa IIS di continuare a elaborare la richiesta. Al contrario, un valore restituito di RQ_NOTIFICATION_FINISH_REQUEST indica a IIS di interrompere l'elaborazione nella richiesta corrente.

Pulizia CHttpModule

Al termine dell'elaborazione di un modulo, IIS chiamerà il metodo CHttpModule::D ispose del modulo per rimuovere la CHttpModule classe dalla memoria.

Creazione di un modulo a livello globale

Creazione di una classe derivata da CGlobalModule

La funzionalità di elaborazione principale per i moduli HTTP a livello globale viene fornita tramite un modulo derivato dalla classe CGlobalModule di base. Questa classe deve contenere un metodo di callback per ogni notifica elencata nella RegisterModule funzione . Ad esempio, se il modulo è registrato per il GL_APPLICATION_START e le notifiche di GL_APPLICATION_STOP , la classe deve contenere metodi OnGlobalApplicationStart e OnGlobalApplicationStop .

Ritorno dai metodi di CGlobalModule

Alla fine dell'elaborazione dei metodi nella classe CGlobalModule, ogni metodo deve restituire un valore di enumerazione GLOBAL_NOTIFICATION_STATUS. Questo valore determina il modo in cui IIS gestirà la condizione di uscita dei metodi della classe. Ad esempio, un valore restituito di GL_NOTIFICATION_CONTINUE informa IIS di continuare a elaborare la notifica. Al contrario, un valore restituito di GL_NOTIFICATION_HANDLED indica a IIS di interrompere l'elaborazione nella notifica corrente.

Pulizia CGlobalModule

Al termine dell'elaborazione di un modulo, IIS chiamerà il metodo CGlobalModule::Terminate del modulo. Il modulo deve usare questo metodo per rimuovere la CGlobalModule classe dalla memoria.

Vedere anche

Procedura dettagliata: Creazione di un modulo HTTP Request-Level tramite codice nativo
Procedura dettagliata: Creazione di un modulo HTTP Global-Level tramite codice nativo
Creazione di moduli HTTP Native-Code