Partager via


REQUEST_NOTIFICATION_STATUS, énumération

Définit les valeurs de retour pour les notifications au niveau de la demande.

Syntaxe

typedef enum REQUEST_NOTIFICATION_STATUS{  
   RQ_NOTIFICATION_CONTINUE,  
   RQ_NOTIFICATION_PENDING,  
   RQ_NOTIFICATION_FINISH_REQUEST  
};  

Membres

Nom du membre Description
RQ_NOTIFICATION_CONTINUE Indique qu’IIS doit continuer à traiter des notifications supplémentaires au niveau de la demande.
RQ_NOTIFICATION_PENDING Indique qu’une notification asynchrone est en attente et retourne le traitement au niveau de la demande à IIS.
RQ_NOTIFICATION_FINISH_REQUEST Indique qu’IIS a terminé le traitement des notifications au niveau de la demande et ne doit pas traiter d’autres notifications au niveau de la demande.

Remarques

Les membres de l’énumération REQUEST_NOTIFICATION_STATUS sont utilisés comme valeurs de retour à partir de notifications au niveau de la demande, et les membres aident à contrôler le flux de processus au sein du pipeline de traitement des demandes intégré. Par exemple, le retour RQ_NOTIFICATION_CONTINUE à partir d’un gestionnaire de notifications au niveau de la demande indique à IIS de continuer à traiter d’autres notifications au niveau de la demande, tandis que le retour RQ_NOTIFICATION_FINISH_REQUEST à partir d’un gestionnaire de notifications au niveau de la demande informe IIS que le traitement au niveau de la demande est terminé et qu’IIS ne doit pas traiter d’autres notifications au niveau de la demande. Les modules qui implémentent la gestion des requêtes doivent retourner RQ_NOTIFICATION_FINISH_REQUEST en cas d’erreur.

Exemple

L’exemple suivant implémente un RQ_BEGIN_REQUEST gestionnaire. Si la requête n’est pas un fichier HTML, l’exemple retourne RQ_NOTIFICATION_CONTINUE et le traitement normal se produit. Lorsque la valeur du compteur a un reste zéro, le fichier demandé est remplacé par une chaîne retournée par la méthode IHttpResponse::WriteEntityChunkByReference et l’exemple retourne RQ_NOTIFICATION_FINISH_REQUEST. Si une erreur se produit, l’exemple consigne l’erreur et retourne RQ_NOTIFICATION_FINISH_REQUEST.

REQUEST_NOTIFICATION_STATUS
CMyHttpModule::OnBeginRequest(
    IHttpContext*       pHttpContext,
    IHttpEventProvider* pProvider
)
{
    HRESULT hr;

    static long cnt;
    InterlockedIncrement(&cnt);  // keep track of how many times we are called
    cnt++;

    IHttpRequest *pRequest = pHttpContext->GetRequest();
    PCWSTR url = pRequest->GetRawHttpRequest()->CookedUrl.pAbsPath;
    OutputDebugStringW(url);

    // return unless requesting a HTML file

    if (!wcsstr(url, L".htm"))
        return RQ_NOTIFICATION_CONTINUE;

    IHttpResponse * pHttpResponse = pHttpContext->GetResponse();

    // Return most times so we can still view content
    if ((cnt % 5) || pHttpResponse == NULL)
        return RQ_NOTIFICATION_CONTINUE;

    TRC_MSG_FULL("HTML  cnt = " << cnt);

    static int insertPosCnt;
    int insertPos = ++insertPosCnt % 2 - 1;    // toggle between 0 and -1

    // Use ostringstream to create some dynamic content
    std::ostringstream os;

    os << "<p /> first chunk  callback count = " << cnt
        << " insertPos = " << insertPos << "<br />";

    // 
    // WECbyRefChunk does all the work of inserting data into the response
    //

    hr = WECbyRefChunk(os, pHttpContext, pProvider, insertPos);
    if (FAILED(hr))
        return RQ_NOTIFICATION_FINISH_REQUEST;

    os << "<br /> <b> Adding 2nd chunk in Bold </b> File insertPos = " << insertPos;
    hr = WECbyRefChunk(os, pHttpContext, pProvider, insertPos);
    if (FAILED(hr))
        return RQ_NOTIFICATION_FINISH_REQUEST;

    os << " <p /> Last (3rd) Chunk added with default append chunk  GetCurrentThreadId = "
        << GetCurrentThreadId();

    // any errors will be logged/handled in  WECbyRefChunk
    WECbyRefChunk(os, pHttpContext, pProvider);

    // End additional processing, not because of error, but so another request
    // (from a GIF or .css style sheet on the same HTML page)
    // doesn't wipe out our WriteEntityChunkByReference. We can also get the
    // WriteEntityChunkByReference prepended to our normal HTML page. 

    return RQ_NOTIFICATION_FINISH_REQUEST;

}
HRESULT hr = S_OK;

IHttpTraceContext * pTraceContext = pHttpContext->GetTraceContext();
hr = My_Events::My_COMPLETION::RaiseEvent(pTraceContext, InsertPosition);
if (FAILED(hr)) {
    LOG_ERR_HR(hr, "RaiseEvent");
    return hr;
}

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

Énumérations principales du serveur web
GLOBAL_NOTIFICATION_STATUS, énumération