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