HttpListener Kelas

Definisi

Menyediakan pendengar protokol HTTP yang sederhana dan dikontrol secara terprogram. Kelas ini tidak dapat diwariskan.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Warisan
HttpListener
Penerapan

Contoh

// This example requires the System and System.Net namespaces.
public static void SimpleListenerExample(string[] prefixes)
{
    if (!HttpListener.IsSupported)
    {
        Console.WriteLine ("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
        return;
    }
    // URI prefixes are required,
    // for example "http://contoso.com:8080/index/".
    if (prefixes == null || prefixes.Length == 0)
      throw new ArgumentException("prefixes");

    // Create a listener.
    HttpListener listener = new HttpListener();
    // Add the prefixes.
    foreach (string s in prefixes)
    {
        listener.Prefixes.Add(s);
    }
    listener.Start();
    Console.WriteLine("Listening...");
    // Note: The GetContext method blocks while waiting for a request.
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;
    // Obtain a response object.
    HttpListenerResponse response = context.Response;
    // Construct a response.
    string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length;
    System.IO.Stream output = response.OutputStream;
    output.Write(buffer,0,buffer.Length);
    // You must close the output stream.
    output.Close();
    listener.Stop();
}
Public Shared Sub SimpleListenerExample(prefixes As String())
    If Not HttpListener.IsSupported Then
        Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.")
        Return
    End If
    ' URI prefixes are required,
    ' for example "http://contoso.com:8080/index/".
    If prefixes Is Nothing Or prefixes.Length = 0 Then
        Throw New ArgumentException("prefixes")
    End If

    ' Create a listener
    Dim listener = New HttpListener()

    For Each s As String In prefixes
        listener.Prefixes.Add(s)
    Next
    listener.Start()
    Console.WriteLine("Listening...")
    ' Note: The GetContext method blocks while waiting for a request.
    Dim context As HttpListenerContext = listener.GetContext()
    Console.WriteLine("Listening...")
    ' Obtain a response object
    Dim request As HttpListenerRequest = context.Request
    ' Construct a response.
    Dim response As HttpListenerResponse = context.Response
    Dim responseString As String = "<HTML><BODY> Hello world!</BODY></HTML>"
    Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
    ' Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length
    Dim output As System.IO.Stream = response.OutputStream
    output.Write(buffer, 0, buffer.Length)
    'You must close the output stream.
    output.Close()
    listener.Stop()
End Sub

Keterangan

Dengan menggunakan kelas , HttpListener Anda dapat membuat pendengar protokol HTTP sederhana yang merespons permintaan HTTP. Pendengar aktif selama masa hidup objek HttpListener dan berjalan di dalam aplikasi Anda dengan izin aplikasinya.

Untuk menggunakan HttpListener, buat instance baru dari kelas dengan konstruktor HttpListener dan gunakan properti Prefixes untuk mendapatkan akses ke koleksi yang menyimpan string yang menentukan awalan Pengidentifikasi Sumber Daya Seragam (URI) mana yang HttpListener harus proses.

String awalan URI terdiri dari skema (http atau https), host, port opsional, dan jalur opsional. Contoh string awalan lengkap adalah http://www.contoso.com:8080/customerData/. Awalan harus diakhiri dengan garis miring ("/"). Objek HttpListener dengan awalan yang paling cocok dengan URI yang diminta merespons permintaan. Beberapa HttpListener objek tidak dapat menambahkan awalan yang sama; Win32Exception pengecualian dilemparkan jika HttpListener menambahkan awalan yang sudah digunakan.

Ketika port ditentukan, elemen host dapat diganti dengan "*" untuk menunjukkan bahwa HttpListener akan menerima permintaan yang dikirim ke port jika URI yang diminta tidak sesuai dengan awalan lain manapun. Misalnya, untuk menerima semua permintaan yang dikirim ke port 8080 ketika URI yang diminta tidak ditangani oleh apa pun HttpListener, awalannya adalah http://*:8080/. Demikian pula, untuk menentukan bahwa HttpListener menerima semua permintaan yang dikirim ke port, ganti elemen host dengan karakter "+". Contohnya, https://+:8080. Karakter "*" dan "+" dapat hadir dalam awalan yang menyertakan jalur.

Wildcard subdomain didukung dalam awalan URI yang dikelola oleh sebuah objek HttpListener. Untuk menentukan subdomain karakter pengganti, gunakan karakter "*" sebagai bagian dari nama host dalam awalan URI. Misalnya, http://*.foo.com/. Teruskan ini sebagai argumen ke metode Add.

Warning

Pengikatan kartubebas tingkat atas (http://*:8080/ dan http://+:8080) tidak boleh digunakan. Pengikatan wildcard tingkat atas dapat mengekspos aplikasi Anda terhadap kerentanan keamanan. Ini berlaku untuk wildcard kuat dan lemah. Gunakan nama host eksplisit alih-alih wildcard. Pengikatan wildcard subdomain (misalnya, *.mysub.com) tidak memiliki risiko keamanan ini jika Anda mengontrol seluruh domain induk (alih-alih *.com, yang rentan). Lihat rfc7230 section-5.4 untuk informasi selengkapnya.

Untuk mulai mendengarkan permintaan dari klien, tambahkan awalan URI ke koleksi dan panggil Start metode . HttpListener menawarkan model sinkron dan asinkron untuk memproses permintaan klien. Permintaan dan respons terkait diakses menggunakan objek HttpListenerContext yang dikembalikan oleh metode GetContext atau versi asinkronnya, metode BeginGetContext dan metode EndGetContext.

Model sinkron sesuai jika aplikasi Anda harus memblokir saat menunggu permintaan klien dan jika Anda hanya ingin memproses satu permintaan pada satu waktu. Menggunakan model sinkron, panggil GetContext metode , yang menunggu klien mengirim permintaan. Metode mengembalikan objek HttpListenerContext kepada Anda untuk diproses ketika terjadi.

Dalam model asinkron yang lebih kompleks, aplikasi Anda tidak memblokir saat menunggu permintaan dan setiap permintaan diproses dalam utas eksekusinya sendiri. Gunakan metode BeginGetContext untuk menentukan metode yang ditetapkan aplikasi yang akan dipanggil untuk setiap permintaan masuk. Dalam metode itu, panggil metode EndGetContext untuk mendapatkan permintaan, memprosesnya, dan merespons.

Dalam salah satu model, permintaan masuk diakses menggunakan HttpListenerContext.Request properti dan diwakili oleh HttpListenerRequest objek. Demikian pula, respons diakses menggunakan HttpListenerContext.Response properti dan diwakili oleh HttpListenerResponse objek. Objek-objek ini berbagi beberapa fungsionalitas dengan HttpWebRequest objek dan HttpWebResponse , tetapi objek terakhir tidak dapat digunakan bersama dengan HttpListener karena mereka menerapkan klien, bukan server, perilaku.

Sebuah HttpListener dapat memerlukan autentikasi klien. Anda dapat menentukan skema tertentu untuk digunakan untuk autentikasi, atau Anda dapat menentukan delegasi yang menentukan skema yang akan digunakan. Anda harus memerlukan beberapa bentuk autentikasi untuk mendapatkan informasi tentang identitas klien. Untuk informasi tambahan, lihat User, AuthenticationSchemes, dan AuthenticationSchemeSelectorDelegate properti.

Note

Jika Anda membuat HttpListener menggunakan https, Anda harus memilih Sertifikat Server untuk pendengar tersebut. Jika tidak, permintaan ke HttpListener ini akan gagal dengan penutupan koneksi yang tidak terduga.

Note

Anda dapat mengonfigurasi Sertifikat Server dan opsi pendengar lainnya dengan menggunakan Network Shell (netsh.exe). Lihat Network Shell (Netsh) untuk detail selengkapnya. Executable mulai tersedia dengan Windows Server 2008 dan Windows Vista.

Note

Jika Anda menentukan beberapa skema autentikasi untuk HttpListener, pendengar akan menantang klien dalam urutan berikut: Negotiate, , NTLMDigest, lalu Basic.

HTTP.sys

Kelas HttpListener ini dibangun di atas HTTP.sys, yang merupakan pendengar mode kernel yang menangani semua lalu lintas HTTP untuk Windows. HTTP.sys menyediakan manajemen koneksi, pembatasan bandwidth, dan pengelogan server web. Gunakan alat HttpCfg.exe untuk menambahkan sertifikat SSL.

Mulai dari .NET 11, implementasi Windows HTTP.sys mendukung pengaktifan buffering respons pada tingkat kernel. Saat diaktifkan, data respons di-buffer oleh HTTP.sys sebelum dikirim ke klien, yang dapat meningkatkan throughput untuk koneksi latensi tinggi. Ini dapat diaktifkan dengan memanggil AppContext.SetSwitch metode sebagai berikut:

AppContext.SetSwitch("System.Net.HttpListener.EnableKernelResponseBuffering", true);

Konstruktor

Nama Deskripsi
HttpListener()

Menginisialisasi instans baru dari kelas HttpListener.

Properti

Nama Deskripsi
AuthenticationSchemes

Mendapatkan atau mengatur skema yang digunakan untuk mengautentikasi klien.

AuthenticationSchemeSelectorDelegate

Mendapatkan atau mengatur delegasi yang dipanggil untuk menentukan protokol yang digunakan untuk mengautentikasi klien.

DefaultServiceNames

Mendapatkan daftar default Nama Penyedia Layanan (SPN) seperti yang ditentukan oleh awalan terdaftar.

ExtendedProtectionPolicy

Mendapatkan atau mengatur ExtendedProtectionPolicy untuk digunakan untuk perlindungan yang diperluas untuk sesi.

ExtendedProtectionSelectorDelegate

Mendapatkan atau mengatur delegasi yang dipanggil untuk menentukan penggunaan ExtendedProtectionPolicy untuk setiap permintaan.

IgnoreWriteExceptions

Mendapatkan atau menetapkan Boolean nilai yang menentukan apakah aplikasi Anda menerima pengecualian yang terjadi saat HttpListener mengirim respons ke klien.

IsListening

Mendapatkan nilai yang menunjukkan apakah HttpListener telah dimulai.

IsSupported

Mendapatkan nilai yang menunjukkan apakah HttpListener dapat digunakan dengan sistem operasi saat ini.

Prefixes

Mendapatkan awalan Pengidentifikasi Sumber Daya Seragam (URI) yang ditangani oleh objek ini HttpListener .

Realm

Mendapatkan atau mengatur realm, atau partisi sumber daya, yang terkait dengan objek ini HttpListener .

TimeoutManager

Manajer waktu habis untuk instans ini HttpListener .

UnsafeConnectionNtlmAuthentication

Mendapatkan atau mengatur Boolean nilai yang mengontrol apakah, ketika NTLM digunakan, permintaan tambahan menggunakan koneksi Protokol Kontrol Transmisi (TCP) yang sama diperlukan untuk mengautentikasi.

Metode

Nama Deskripsi
Abort()

Segera mematikan HttpListener objek, membuang semua permintaan yang saat ini diantrekan.

BeginGetContext(AsyncCallback, Object)

Mulai mengambil permintaan masuk secara asinkron.

Close()

HttpListenerMematikan .

EndGetContext(IAsyncResult)

Menyelesaikan operasi asinkron untuk mengambil permintaan klien masuk.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetContext()

Menunggu permintaan masuk dan kembali saat permintaan diterima.

GetContextAsync()

Menunggu permintaan masuk sebagai operasi asinkron.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
Start()

Memungkinkan instans ini menerima permintaan masuk.

Stop()

Menyebabkan instans ini berhenti menerima permintaan masuk baru dan mengakhiri pemrosesan semua permintaan yang sedang berlangsung.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

Nama Deskripsi
IDisposable.Dispose()

Melepaskan sumber daya yang dipegang oleh objek ini HttpListener .

Berlaku untuk

Lihat juga