Freigeben über


REQUEST_NOTIFICATION_STATUS-Enumeration

Definiert die Rückgabewerte für Benachrichtigungen auf Anforderungsebene.

Syntax

typedef enum REQUEST_NOTIFICATION_STATUS{  
   RQ_NOTIFICATION_CONTINUE,  
   RQ_NOTIFICATION_PENDING,  
   RQ_NOTIFICATION_FINISH_REQUEST  
};  

Members

Membername Beschreibung
RQ_NOTIFICATION_CONTINUE Gibt an, dass IIS weitere Benachrichtigungen auf Anforderungsebene verarbeiten soll.
RQ_NOTIFICATION_PENDING Gibt an, dass eine asynchrone Benachrichtigung aussteht und die Verarbeitung auf Anforderungsebene an IIS zurückgibt.
RQ_NOTIFICATION_FINISH_REQUEST Gibt an, dass IIS die Verarbeitung von Benachrichtigungen auf Anforderungsebene abgeschlossen hat und keine zusätzlichen Benachrichtigungen auf Anforderungsebene verarbeiten sollte.

Bemerkungen

Die Member der REQUEST_NOTIFICATION_STATUS Enumeration werden als Rückgabewerte von Benachrichtigungen auf Anforderungsebene verwendet, und die Member helfen, den Prozessfluss innerhalb der integrierten Anforderungsverarbeitungspipeline zu steuern. Wenn Sie beispielsweise von einem Benachrichtigungshandler auf Anforderungsebene zurückgeben RQ_NOTIFICATION_CONTINUE , wird IIS angewiesen, weitere Benachrichtigungen auf Anforderungsebene weiter zu verarbeiten, während die Rückgabe RQ_NOTIFICATION_FINISH_REQUEST von einem Benachrichtigungshandler auf Anforderungsebene IIS darüber informiert, dass die Verarbeitung auf Anforderungsebene abgeschlossen ist und IIS keine zusätzlichen Benachrichtigungen auf Anforderungsebene verarbeiten sollte. Module, die die Anforderungsbehandlung implementieren, sollten zurückgegeben RQ_NOTIFICATION_FINISH_REQUEST werden, wenn ein Fehler auftritt.

Beispiel

Im folgenden Beispiel wird ein RQ_BEGIN_REQUEST Handler implementiert. Wenn es sich bei der Anforderung nicht um eine HTML-Datei handelt, wird das Beispiel zurückgegeben RQ_NOTIFICATION_CONTINUE , und die normale Verarbeitung erfolgt. Wenn der Zählerwert einen Rest von null aufweist, wird die angeforderte Datei durch eine Zeichenfolge ersetzt, die von der IHttpResponse::WriteEntityChunkByReference-Methode zurückgegeben wird, und das Beispiel gibt zurück RQ_NOTIFICATION_FINISH_REQUEST. Wenn ein Fehler auftritt, protokolliert das Beispiel den Fehler und gibt zurück 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;
}

Anforderungen

type BESCHREIBUNG
Client – IIS 7.0 unter Windows Vista
– IIS 7.5 unter Windows 7
– IIS 8.0 unter Windows 8
– IIS 10.0 auf Windows 10
Server – IIS 7.0 unter Windows Server 2008
– IIS 7.5 unter Windows Server 2008 R2
– IIS 8.0 unter Windows Server 2012
– IIS 8.5 unter Windows Server 2012 R2
– IIS 10.0 auf Windows Server 2016
Produkt – 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
Header Httpserv.h

Weitere Informationen

Webserver-Core-Enumerationen
GLOBAL_NOTIFICATION_STATUS-Enumeration