SocketsHttpHandler.ConnectCallback Properti

Definisi

Mendapatkan atau mengatur panggilan balik kustom yang digunakan untuk membuka koneksi baru.

public:
 property Func<System::Net::Http::SocketsHttpConnectionContext ^, System::Threading::CancellationToken, System::Threading::Tasks::ValueTask<System::IO::Stream ^>> ^ ConnectCallback { Func<System::Net::Http::SocketsHttpConnectionContext ^, System::Threading::CancellationToken, System::Threading::Tasks::ValueTask<System::IO::Stream ^>> ^ get(); void set(Func<System::Net::Http::SocketsHttpConnectionContext ^, System::Threading::CancellationToken, System::Threading::Tasks::ValueTask<System::IO::Stream ^>> ^ value); };
public Func<System.Net.Http.SocketsHttpConnectionContext,System.Threading.CancellationToken,System.Threading.Tasks.ValueTask<System.IO.Stream>>? ConnectCallback { get; set; }
member this.ConnectCallback : Func<System.Net.Http.SocketsHttpConnectionContext, System.Threading.CancellationToken, System.Threading.Tasks.ValueTask<System.IO.Stream>> with get, set
Public Property ConnectCallback As Func(Of SocketsHttpConnectionContext, CancellationToken, ValueTask(Of Stream))

Nilai Properti

Metode panggilan balik untuk membuat aliran.

Pengecualian

Operasi telah dimulai pada instans saat ini.

Instans saat ini telah dibuang.

Contoh

Contoh kode berikut menetapkan TCP KeepAlive pada Socket.

static async Task Main()
{
    using SocketsHttpHandler handler = new SocketsHttpHandler();

    handler.ConnectCallback = async (ctx, ct) =>
    {
        DnsEndPoint dnsEndPoint = ctx.DnsEndPoint;
        IPAddress[] addresses = await Dns.GetHostAddressesAsync(dnsEndPoint.Host, dnsEndPoint.AddressFamily, ct);
        var s = new Socket(SocketType.Stream, ProtocolType.Tcp) { NoDelay = true };
        try
        {
            s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
            s.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveTime, 5);
            s.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveInterval, 5);
            s.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveRetryCount, 5);

            await s.ConnectAsync(addresses, dnsEndPoint.Port, ct);
            return new NetworkStream(s, ownsSocket: true);
        }
        catch
        {
            s.Dispose();
            throw;
        }
    };

    // Create an HttpClient object
    using HttpClient client = new HttpClient(handler);

    // Call asynchronous network methods in a try/catch block to handle exceptions
    try
    {
        HttpResponseMessage response = await client.GetAsync("https://learn.microsoft.com/");

        response.EnsureSuccessStatusCode();

        string responseBody = await response.Content.ReadAsStringAsync();
        Console.WriteLine($"Read {responseBody.Length} characters");
    }
    catch (HttpRequestException e)
    {
        Console.WriteLine("\nException Caught!");
        Console.WriteLine($"Message: {e.Message} ");
    }
}

Berlaku untuk