Freigeben über


IWinHttpRequest::SetTimeouts-Methode

Die SetTimeouts-Methode gibt die einzelnen Timeoutkomponenten eines Sende-/Empfangsvorgangs in Millisekunden an.

Syntax

HRESULT SetTimeouts(
  [in] long ResolveTimeout,
  [in] long ConnectTimeout,
  [in] long SendTimeout,
  [in] long ReceiveTimeout
);

Parameter

ResolveTimeout [in]

Timeoutwert, der beim Auflösen eines Hostnamens (z www.microsoft.com. B. ) auf eine IP-Adresse (z. B. 192.168.131.199) in Millisekunden angewendet wird. Der Standardwert ist 0, d. h. kein Timeout (unendlich). Wenn das DNS-Timeout mithilfe von NAME_RESOLUTION_TIMEOUT angegeben wird, entsteht ein Mehraufwand von einem Thread pro Anforderung.

ConnectTimeout [in]

Timeoutwert, der beim Einrichten eines Kommunikationssockets mit dem Zielserver in Millisekunden angewendet wird. Der Standardwert ist 60.000 (60 Sekunden).

SendTimeout [in]

Timeoutwert, der beim Senden eines einzelnen Pakets mit Anforderungsdaten auf dem Kommunikationssocket an den Zielserver in Millisekunden angewendet wird. Eine große Anforderung, die an einen HTTP-Server gesendet wird, wird normalerweise in mehrere Pakete unterteilt. das Sendetimeout gilt für das senden jedes Paket einzeln. Der Standardwert ist 30.000 (30 Sekunden).

ReceiveTimeout [in]

Timeoutwert, der beim Empfangen eines Pakets mit Antwortdaten vom Zielserver in Millisekunden angewendet wird. Große Antworten werden in mehrere Pakete unterteilt. das Empfangstimeout gilt für das Abrufen jedes Datenpakets vom Socket. Der Standardwert ist 30.000 (30 Sekunden).

Rückgabewert

Der Rückgabewert wird bei Erfolg S_OK oder andernfalls ein Fehlerwert.

Bemerkungen

Alle Parameter sind erforderlich. Ein Wert von 0 oder -1 legt ein Timeout für unendliches Warten fest. Ein Wert größer als 0 legt den Timeoutwert in Millisekunden fest. Beispielsweise würden 30.000 das Timeout auf 30 Sekunden festlegen. Alle negativen Werte außer -1 führen dazu, dass diese Methode fehlschlägt.

Timeoutwerte werden auf die Winsock-Ebene angewendet.

Hinweis

Informationen zu Windows XP und Windows 2000 finden Sie im Abschnitt Laufzeitanforderungen der WinHttp-Startseite .

Beispiele

Das folgende Beispiel zeigt, wie Alle WinHTTP-Timeouts auf 30 Sekunden festgelegt werden, eine HTTP-Verbindung geöffnet, eine HTTP-Anforderung gesendet und der Antworttext gelesen wird.

#include <windows.h>
#include <stdio.h>
#include <objbase.h>

#include "httprequest.h"

#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")

// IID for IWinHttpRequest.
const IID IID_IWinHttpRequest =
{
  0x06f29373,
  0x5c5a,
  0x4b54,
  {0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}
};

int main()
{
    // variable for return value
    HRESULT    hr;

    // initialize COM
    hr = CoInitialize( NULL );

    IWinHttpRequest *  pIWinHttpRequest = NULL;

    BSTR            bstrResponse = NULL;
    VARIANT         varFalse;
    VARIANT         varEmpty;

    CLSID           clsid;

    VariantInit(&varFalse);
    V_VT(&varFalse)   = VT_BOOL;
    V_BOOL(&varFalse) = VARIANT_FALSE;

    VariantInit(&varEmpty);
    V_VT(&varEmpty) = VT_ERROR;

    hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(clsid, NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_IWinHttpRequest,
                              (void **)&pIWinHttpRequest);
    }

    if (SUCCEEDED(hr))
    {    // Set Time-outs.
        hr = pIWinHttpRequest->SetTimeouts(30000, 30000,
                                           30000, 30000);
    }
    if (SUCCEEDED(hr))
    {    // Open WinHttpRequest.
        BSTR bstrMethod  = SysAllocString(L"GET");
        BSTR bstrUrl = SysAllocString(L"https://microsoft.com");
        hr = pIWinHttpRequest->Open(bstrMethod,
                                    bstrUrl,
                                    varFalse);
        SysFreeString(bstrMethod);
        SysFreeString(bstrUrl);
    }
    if (SUCCEEDED(hr))
    {    // Send Request.
        hr = pIWinHttpRequest->Send(varEmpty);
    }
    if (SUCCEEDED(hr))
    {    // Get Response text.
        hr = pIWinHttpRequest->GetAllResponseHeaders(&bstrResponse);
    }
    if (SUCCEEDED(hr))
    {    // Print response to console.
        wprintf(L"%.256s",bstrResponse);
    }

    // Release memory.
    if (pIWinHttpRequest)
        pIWinHttpRequest->Release();
    if (bstrResponse)
        SysFreeString(bstrResponse);

    CoUninitialize();
    return 0;
}

Im folgenden Skriptbeispiel wird gezeigt, wie alle WinHTTP-Timeouts auf 30 Sekunden festgelegt, eine HTTP-Verbindung geöffnet und eine HTTP-Anforderung gesendet werden.

// Instantiate a WinHttpRequest object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");

// Set time-outs. If time-outs are set, they must 
// be set before open.
WinHttpReq.SetTimeouts(30000, 30000, 30000, 30000);

// Initialize an HTTP request.  
WinHttpReq.Open("GET", "https://www.microsoft.com", false);

// Send the HTTP request.
WinHttpReq.Send();

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP, Windows 2000 Professional mit SP3 [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003, Windows 2000 Server mit SP3 [nur Desktop-Apps]
Verteilbare Komponente
WinHTTP 5.0 und Internet Explorer 5.01 oder höher unter Windows XP und Windows 2000.
IDL
HttpRequest.idl
Bibliothek
Winhttp.lib
DLL
Winhttp.dll

Siehe auch

IWinHttpRequest

WinHttpRequest

WinHTTP-Versionen