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. Anche se alcune delle funzionalità fornite dai moduli di codice nativo possono essere simili a quelle disponibili in precedenza con filtri ISAPI, i moduli di codice nativo sono progettati in modo diverso e forniscono un set di funzionalità molto più avanzato rispetto ai filtri ISAPI.

Requisiti per i moduli HTTP 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 (con estensione def) per il progetto oppure è possibile compilare il modulo usando l'opzione /EXPORT:RegisterModule .

Specifica delle notifiche e della priorità del modulo

Quando si crea la RegisterModule funzione, si specifica una maschera bit contenente un elenco di notifiche che il modulo a livello di richiesta verrà elaborato (per altre informazioni, vedere Costanti di elaborazione richieste). Ad esempio, un modulo a livello di richiesta potrebbe specificare che fornirà metodi per elaborare la notifica di RQ_BEGIN_REQUEST e la notifica RQ_MAP_PATH post-notifica. Analogamente, un modulo a livello globale potrebbe specificare che fornirà metodi per elaborare i GL_APPLICATION_START e le notifiche di GL_APPLICATION_STOP .

La RegisterModule funzione consente inoltre di specificare la priorità per il modulo. Le priorità disponibili sono PRIORITY_ALIAS_FIRST, , PRIORITY_ALIAS_MEDIUMPRIORITY_ALIAS_HIGH, PRIORITY_ALIAS_LOWe PRIORITY_ALIAS_LAST. Quando i moduli vengono registrati, vengono elaborati in ordine di priorità e impostazioni di configurazione. Ad esempio, se si crea un modulo HTTP che registra come modulo con priorità media, il modulo non verrà elaborato fino a quando non sono stati elaborati tutti i moduli con priorità elevata. È 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.

Nota

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

Creazione di moduli di Request-Level

Creazione di una factory di moduli

I moduli di richiesta a livello di codice nativo devono fornire una factory di moduli che crea un'istanza della classe CHttpModule . La factory 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 viene registrato per la notifica RQ_AUTHENTICATE_REQUESTe la notifica RQ_AUTHORIZE_REQUEST post-notifica, la classe deve contenere metodi OnAuthenticateRequest e OnPostAuthorizeRequest.

Restituzione da metodi CHttpModule

Quando i metodi nella classe hanno completato l'elaborazione CHttpModule , ogni metodo deve restituire un valore di enumerazione REQUEST_NOTIFICATION_STATUS . Questo valore determina come 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 Global-Level

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 viene registrato per i GL_APPLICATION_START e le notifiche di GL_APPLICATION_STOP, la classe deve contenere OnGlobalApplicationStart e OnGlobalApplicationStop.

Restituzione da metodi CGlobalModule

Al termine dell'elaborazione CGlobalModule dei metodi della classe, ogni metodo deve restituire un valore di enumerazione GLOBAL_NOTIFICATION_STATUS . Questo valore determina come 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