Freigeben über


IHttpResponse::Flush-Methode

Sendet den vorhandenen Inhalt im Antwortpuffer an den Client.

Syntax

virtual HRESULT Flush(  
   IN BOOL fAsync,  
   IN BOOL fMoreData,  
   OUT DWORD* pcbSent,  
   OUT BOOL* pfCompletionExpected = NULL  
) = 0;  

Parameter

fAsync
[IN] true , um den Vorgang asynchron abzuschließen; falseandernfalls .

fMoreData
[IN] true weitere Daten in dieser Antwort zu senden; falseandernfalls .

pcbSent
[OUT] Ein Zeiger auf einen DWORD , der die Anzahl der an den Client gesendeten Bytes empfängt.

pfCompletionExpected
[OUT] Ein Zeiger auf einen booleschen Wert, der empfängt, ob für diesen Aufruf eine asynchrone Vervollständigung aussteht.

Rückgabewert

HRESULT. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Wert BESCHREIBUNG
S_OK Gibt an, dass der Vorgang erfolgreich war.
ERROR_INVALID_DATA Gibt an, dass die Daten ungültig sind.
ERROR_NOT_ENOUGH_MEMORY Gibt an, dass nicht genügend Arbeitsspeicher zum Ausführen des Vorgangs vorhanden ist.

Bemerkungen

Die Flush -Methode sendet die derzeit verfügbare Antwort an den Client. Die Antwort enthält mindestens die status-Header, enthält aber auch alle Antwortpuffer, die beim Aufrufen der -Methode vorhanden sind.

Legen Sie den fMoreData Parameter auf festtrue, wenn nach dem Aufrufen der Flush -Methode weitere Daten zurückgegeben werden, oder legen Sie auf false festfMoreData, wenn keine Daten mehr vorhanden sind.

Die Flush -Methode unterstützt synchrone und asynchrone Vorgänge. Geben Sie den Betriebsmodus an, indem Sie den fAsync Parameter auf true festlegen, wenn der Vorgang asynchron ist, oder auffalse, fAsync wenn der Vorgang synchron ist.

Hinweis

Wenn Sie diese Methode asynchron aufrufen, müssen Sie unmittelbar nach dem Aufruf zurückgeben.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie die Flush -Methode verwendet wird, um die aktuelle Antwort an den Client zu senden. Da die Flush -Methode die Antwortheader an den Client gesendet hat, hat der nachfolgende Aufruf der Clear-Methode keine Auswirkung.

#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>

// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
    REQUEST_NOTIFICATION_STATUS
    OnBeginRequest(
        IN IHttpContext * pHttpContext,
        IN IHttpEventProvider * pProvider
    )
    {
        UNREFERENCED_PARAMETER( pProvider );

        // Create an HRESULT to receive return values from methods.
        HRESULT hr;
        // Buffer to store the byte count.
        DWORD cbSent = 0;
        // Buffer to store if asyncronous completion is pending.
        BOOL fCompletionExpected = false;

        // Retrieve a pointer to the response.
        IHttpResponse * pHttpResponse = pHttpContext->GetResponse();
        
        // Test for an error.
        if (pHttpResponse != NULL)
        {
            // Flush the response to the client.
            hr = pHttpResponse->Flush(false,true,&cbSent,&fCompletionExpected);
            // Test for an error.
            if (FAILED(hr))
            {
                // Set the error status.
                pProvider->SetErrorStatus( hr );
                // End additional processing.
                return RQ_NOTIFICATION_FINISH_REQUEST;
            }
            // Clear the response.
            pHttpResponse->Clear();
        }

        // Return processing to the pipeline.
        return RQ_NOTIFICATION_CONTINUE;
    }
};

// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
    HRESULT
    GetHttpModule(
        OUT CHttpModule ** ppModule, 
        IN IModuleAllocator * pAllocator
    )
    {
        UNREFERENCED_PARAMETER( pAllocator );

        // Create a new instance.
        MyHttpModule * pModule = new MyHttpModule;

        // Test for an error.
        if (!pModule)
        {
            // Return an error if the factory cannot create the instance.
            return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
        }
        else
        {
            // Return a pointer to the module.
            *ppModule = pModule;
            pModule = NULL;
            // Return a success status.
            return S_OK;
        }            
    }

    void Terminate()
    {
        // Remove the class from memory.
        delete this;
    }
};

// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
    DWORD dwServerVersion,
    IHttpModuleRegistrationInfo * pModuleInfo,
    IHttpServer * pGlobalInfo
)
{
    UNREFERENCED_PARAMETER( dwServerVersion );
    UNREFERENCED_PARAMETER( pGlobalInfo );

    // Set the request notifications and exit.
    return pModuleInfo->SetRequestNotifications(
        new MyHttpModuleFactory,
        RQ_BEGIN_REQUEST,
        0
    );
}

Ihr Modul muss die RegisterModule-Funktion exportieren. Sie können diese Funktion exportieren, indem Sie eine Moduldefinitionsdatei (.def) für Ihr Projekt erstellen, oder Sie können das Modul mithilfe des Schalters /EXPORT:RegisterModule kompilieren. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Request-Level HTTP-Moduls mithilfe von nativem Code.

Sie können den Code optional kompilieren, indem Sie die __stdcall (/Gz) Aufrufkonvention verwenden, anstatt die Aufrufkonvention für jede Funktion explizit zu deklarieren.

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 unter 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 unter 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

IHttpResponse-Schnittstelle