HttpWebRequest.BeginGetRequestStream(AsyncCallback, Object) Metode

Definisi

Memulai permintaan asinkron untuk objek Stream yang digunakan untuk menulis data.

public override IAsyncResult BeginGetRequestStream (AsyncCallback callback, object state);
public override IAsyncResult BeginGetRequestStream (AsyncCallback? callback, object? state);

Parameter

callback
AsyncCallback

Delegasi AsyncCallback.

state
Object

Objek status untuk permintaan ini.

Mengembalikan

IAsyncResult yang mereferensikan permintaan asinkron.

Pengecualian

Properti Method adalah GET atau HEAD.

-atau-

KeepAlive true, AllowWriteStreamBufferingfalse, ContentLength -1, SendChunkedfalse, dan Method POST atau PUT.

Aliran sedang digunakan oleh panggilan sebelumnya ke BeginGetRequestStream(AsyncCallback, Object)

-atau-

TransferEncoding diatur ke nilai dan SendChunkedfalse.

-atau-

Kumpulan utas kehabisan utas.

Validator cache permintaan menunjukkan bahwa respons untuk permintaan ini dapat dilayani dari cache; namun, permintaan yang menulis data tidak boleh menggunakan cache. Pengecualian ini dapat terjadi jika Anda menggunakan validator cache kustom yang salah diimplementasikan.

Abort() sebelumnya dipanggil.

Dalam aplikasi .NET Compact Framework, aliran permintaan dengan panjang konten nol tidak diperoleh dan ditutup dengan benar. Untuk informasi selengkapnya tentang menangani permintaan panjang konten nol, lihat Network Programming di .NET Compact Framework.

Contoh

Contoh kode berikut menggunakan metode BeginGetRequestStream untuk membuat permintaan asinkron untuk instans aliran.

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;

class HttpWebRequestBeginGetRequest
{
    private static ManualResetEvent allDone = new ManualResetEvent(false);

    public static void Main(string[] args)
    {


        // Create a new HttpWebRequest object.
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/example.aspx");

        request.ContentType = "application/x-www-form-urlencoded";

        // Set the Method property to 'POST' to post data to the URI.
        request.Method = "POST";

        // start the asynchronous operation
        request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);

        // Keep the main thread from continuing while the asynchronous
        // operation completes. A real world application
        // could do something useful such as updating its user interface.
        allDone.WaitOne();
    }

    private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

        // End the operation
        Stream postStream = request.EndGetRequestStream(asynchronousResult);

        Console.WriteLine("Please enter the input data to be posted:");
        string postData = Console.ReadLine();

        // Convert the string into a byte array.
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);

        // Write to the request stream.
        postStream.Write(byteArray, 0, postData.Length);
        postStream.Close();

        // Start the asynchronous operation to get the response
        request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
    }

    private static void GetResponseCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

        // End the operation
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        Stream streamResponse = response.GetResponseStream();
        StreamReader streamRead = new StreamReader(streamResponse);
        string responseString = streamRead.ReadToEnd();
        Console.WriteLine(responseString);
        // Close the stream object
        streamResponse.Close();
        streamRead.Close();

        // Release the HttpWebResponse
        response.Close();
        allDone.Set();
    }
}

Keterangan

Perhatian

WebRequest, HttpWebRequest, ServicePoint, dan WebClient usang, dan Anda tidak boleh menggunakannya untuk pengembangan baru. Gunakan HttpClient sebagai gantinya.

Metode BeginGetRequestStream memulai permintaan asinkron untuk aliran yang digunakan untuk mengirim data untuk HttpWebRequest. Metode panggilan balik asinkron menggunakan metode EndGetRequestStream untuk mengembalikan aliran aktual.

Metode BeginGetRequestStream memerlukan beberapa tugas penyiapan sinkron untuk diselesaikan (resolusi DNS, deteksi proksi, dan koneksi soket TCP, misalnya) sebelum metode ini menjadi asinkron. Akibatnya, metode ini tidak boleh dipanggil pada utas antarmuka pengguna (UI) karena mungkin membutuhkan waktu yang cukup lama (hingga beberapa menit tergantung pada pengaturan jaringan) untuk menyelesaikan tugas penyiapan sinkron awal sebelum pengecualian untuk kesalahan dilemparkan atau metode berhasil.

Untuk mempelajari selengkapnya tentang kumpulan utas, lihat Kumpulan utas terkelola.

Catatan

Aplikasi Anda tidak dapat mencampur metode sinkron dan asinkron untuk permintaan tertentu. Jika Anda memanggil metode BeginGetRequestStream, Anda harus menggunakan metode BeginGetResponse untuk mengambil respons.

Catatan

Anggota ini mengeluarkan informasi pelacakan saat Anda mengaktifkan pelacakan jaringan di aplikasi Anda. Untuk informasi selengkapnya, lihat Pelacakan Jaringan di .NET Framework.

Berlaku untuk

Produk Versi
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

Lihat juga

  • Elemen DefaultProxy (Pengaturan Jaringan)