Metode IWinHttpRequest::SetTimeouts

Metode SetTimeouts menentukan komponen waktu habis individual dari operasi kirim/terima, dalam milidetik.

Sintaks

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

Parameter

ResolveTimeout [in]

Nilai waktu habis diterapkan saat menyelesaikan nama host (seperti www.microsoft.com) ke alamat IP (seperti 192.168.131.199), dalam milidetik. Nilai defaultnya adalah nol, yang berarti tidak ada waktu habis (tak terbatas). Jika batas waktu DNS ditentukan menggunakan NAME_RESOLUTION_TIMEOUT, ada overhead satu utas per permintaan.

ConnectTimeout [in]

Nilai waktu habis diterapkan saat membuat soket komunikasi dengan server target, dalam milidetik. Nilai defaultnya adalah 60.000 (60 detik).

SendTimeout [in]

Nilai waktu habis diterapkan saat mengirim paket individu data permintaan pada soket komunikasi ke server target, dalam milidetik. Permintaan besar yang dikirim ke server HTTP biasanya dipecah menjadi beberapa paket; waktu pengiriman habis berlaku untuk mengirim setiap paket satu per satu. Nilai defaultnya adalah 30.000 (30 detik).

ReceiveTimeout [in]

Nilai waktu habis diterapkan saat menerima paket data respons dari server target, dalam milidetik. Respons besar dipecah menjadi beberapa paket; waktu habis terima berlaku untuk mengambil setiap paket data dari soket. Nilai defaultnya adalah 30.000 (30 detik).

Menampilkan nilai

Nilai yang dikembalikan S_OK pada keberhasilan atau nilai kesalahan jika tidak.

Keterangan

Semua parameter diperlukan. Nilai 0 atau -1 menetapkan waktu habis untuk menunggu tanpa batas. Nilai yang lebih besar dari 0 menetapkan nilai waktu habis dalam milidetik. Misalnya, 30.000 akan mengatur waktu habis menjadi 30 detik. Semua nilai negatif selain -1 menyebabkan metode ini gagal.

Nilai waktu habis diterapkan pada lapisan Winsock.

Catatan

Untuk Windows XP dan Windows 2000, lihat bagian Persyaratan Run-Time di halaman mulai WinHttp.

Contoh

Contoh berikut menunjukkan cara mengatur semua batas waktu WinHTTP menjadi 30 detik, membuka koneksi HTTP, mengirim permintaan HTTP, dan membaca teks respons.

#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;
}

Contoh pembuatan skrip berikut ini memperlihatkan cara mengatur semua batas waktu WinHTTP menjadi 30 detik, membuka koneksi HTTP, dan mengirim permintaan HTTP.

// 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();

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows XP, Windows 2000 Professional dengan SP3 [hanya aplikasi desktop]
Server minimum yang didukung
Windows Server 2003, Windows 2000 Server dengan SP3 [hanya aplikasi desktop]
Redistribusi
WinHTTP 5.0 dan Internet Explorer 5.01 atau yang lebih baru pada Windows XP dan Windows 2000.
IDL
HttpRequest.idl
Pustaka
Winhttp.lib
DLL
Winhttp.dll

Lihat juga

IWinHttpRequest

WinHttpRequest

Versi WinHTTP