HttpListener Sınıf

Tanım

Basit, program aracılığıyla denetlenen bir HTTP protokolü dinleyicisi sağlar. Bu sınıf devralınamaz.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Devralma
HttpListener
Uygulamalar

Örnekler

// 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

Açıklamalar

sınıfını kullanarak, HTTP isteklerine HttpListener yanıt veren basit bir HTTP protokolü dinleyicisi oluşturabilirsiniz. Dinleyici, nesnenin HttpListener ömrü boyunca etkindir ve izinleriyle uygulamanız içinde çalışır.

kullanmak için HttpListener, HttpListener yapıcısını kullanarak sınıfın yeni bir örneğini oluşturun ve Prefixes'ün işlemesi gereken Bir Örnek Kaynak Tanımlayıcı (URI) ön eklerini belirten dizeleri barındıran koleksiyona erişim sağlamak için HttpListener özelliğini kullanın.

URI ön ek dizesi, bir şema (http veya https), bir konak, isteğe bağlı bir bağlantı noktası ve isteğe bağlı bir yoldan oluşur. Tam bir ön ek dizesi örneğidir http://www.contoso.com:8080/customerData/. Ön eklerin eğik çizgi ("/") ile bitmesi gerekir. İstenen HttpListener bir URI ile en yakın eşleşen ön eke sahip nesne isteğe yanıt verir. Birden fazla HttpListener nesne aynı öneki ekleyemez; eğer bir Win32Exception zaten kullanımda olan bir öneki eklerse, bir HttpListener istisnası fırlatılır.

Bir bağlantı noktası belirtildiğinde, istenen URI'nin başka bir ön ekle eşleşmemesi durumunda bağlantı noktasına gönderilen istekleri kabul ettiğini HttpListener belirtmek için konak öğesi "*" ile değiştirilebilir. Örneğin, istenen URI herhangi bir HttpListenertarafından işlenmediğinde 8080 numaralı bağlantı noktasına gönderilen tüm istekleri almak için ön ek http://*:8080/ şeklindedir. Benzer şekilde, bir bağlantı noktasına gönderilen tüm istekleri kabul ettiğini HttpListener belirtmek için konak öğesini "+" karakteriyle değiştirin. Örneğin, https://+:8080. "*" ve "+" karakterleri yol içeren ön eklerde bulunabilir.

Joker karakter alt etki alanları, bir HttpListener nesne tarafından yönetilen URI ön eklerinde desteklenir. Alt etki alanını joker karakter olarak belirlemek için URI ön ekinde ana bilgisayar adının bir parçası olarak "*" karakterini kullanın. Örneğin , http://*.foo.com/. Bunu Add yöntemine bağımsız değişken olarak geçirin.

Warning

Üst düzey joker karakter bağlamaları (http://*:8080/ ve http://+:8080) kullanılmamalıdır. En üst düzey joker karakter bağlamaları uygulamanızda güvenlik açıklarına neden olabilir. Bu durum hem güçlü hem de zayıf joker karakterler için geçerlidir. Joker karakterler yerine açık ana bilgisayar adları kullanın. Üst etki alanının tamamını kontrol ediyorsanız, alt etki alanı joker karakter bağlaması (örneğin *.mysub.com) güvenlik riski oluşturmaz (güvenlik açığı barındıran *.com bağlamasından farklı olarak). Daha fazla bilgi için rfc7230 section-5.4 bölümüne bakın.

İstemcilerden gelen istekleri dinlemeye başlamak için URI ön eklerini koleksiyona ekleyin ve yöntemini çağırın Start . HttpListener istemci isteklerini işlemek için hem zaman uyumlu hem de zaman uyumsuz modeller sunar. İsteklere ve bunlarla ilişkili yanıtlarına, HttpListenerContext yöntemi veya zaman uyumsuz karşılıkları olan GetContext ve BeginGetContext yöntemleri tarafından döndürülen EndGetContext nesnesi kullanılarak erişilir.

Uygulamanız bir istemci isteğini beklerken duraklamalı ve aynı anda yalnızca bir isteği işlemek istiyorsanız eşzamanlı model uygundur. İstemcinin bir istek göndermesini bekleyen GetContext yöntemini, zaman uyumlu modeli kullanarak çağırın. Yöntem, bir nesne oluştuğunda işleme için size HttpListenerContext nesne döndürür.

Daha karmaşık zaman uyumsuz modelde, uygulamanız istekleri beklerken engellemez ve her istek kendi yürütme iş parçacığında işlenir. Her gelen istek için çağrılacak uygulama tanımlı bir yöntem belirtmek için BeginGetContext methodunu kullanın. Bu yöntemin içinde, isteği almak, işlemek ve yanıtlamak için EndGetContext yöntemini çağırın.

Her iki modelde de gelen isteklere HttpListenerContext.Request özelliği kullanılarak erişilir ve HttpListenerRequest nesneleri tarafından temsil edilir. Benzer şekilde, yanıtlar, HttpListenerContext.Response özelliği ile erişilir ve HttpListenerResponse nesneleriyle temsil edilir. Bu nesneler bazı işlevleri HttpWebRequest ve HttpWebResponse nesneleriyle paylaşır, ancak ikinci nesneler sunucu değil istemci davranışlarını uyguladıkları için HttpListener ile birlikte kullanılamazlar.

bir HttpListener istemci kimlik doğrulaması gerektirebilir. Kimlik doğrulaması için kullanılacak belirli bir düzen belirtebilir veya kullanılacak düzeni belirleyen bir temsilci belirtebilirsiniz. İstemcinin kimliği hakkında bilgi edinmek için bir tür kimlik doğrulamasına ihtiyacınız olmalıdır. Ek bilgi için bkz User. , AuthenticationSchemesve AuthenticationSchemeSelectorDelegate özellikleri.

Note

Https kullanarak bir HttpListener oluşturursanız, bu dinleyici için bir Sunucu Sertifikası seçmeniz gerekir. Aksi takdirde, bu HttpListener üzerindeki istekler bağlantının beklenmedik bir şekilde kapatılmasıyla başarısız olacaktır.

Note

Ağ Kabuğu (netsh.exe) kullanarak Sunucu Sertifikalarını ve diğer dinleyici seçeneklerini yapılandırabilirsiniz. Daha fazla ayrıntı için bkz. Network Shell (Netsh). Çalıştırılabilir dosya, Windows Server 2008 ve Windows Vista ile birlikte sunulmaya başlandı.

Note

için HttpListenerbirden çok kimlik doğrulama düzeni belirtirseniz, dinleyici istemcilere şu sırayla meydan okur: Negotiate, NTLM, Digestve sonra Basic.

HTTP.sys

HttpListener sınıfı, Windows için tüm HTTP trafiğini işleyen çekirdek modu dinleyicisi olan öğesinin üzerine HTTP.syskurulmuştur. HTTP.sys bağlantı yönetimi, bant genişliği sınırlama ve web sunucusu kaydı sağlar. SSL sertifikaları eklemek için HttpCfg.exe aracını kullanın.

.NET 11'den başlayarak, Windows HTTP.sys uygulaması HttpListener çekirdek düzeyinde yanıt arabelleğinin etkinleştirilmesini destekler. Etkinleştirildiğinde, yanıt verileri istemciye gönderilmeden önce HTTP.sys tarafından arabelleğe alınır; bu, yüksek gecikme süreli bağlantılar için aktarım hızını iyileştirebilir. Bu, AppContext.SetSwitch yöntemini aşağıdaki gibi çağırarak etkinleştirilebilir:

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

Oluşturucular

Name Description
HttpListener()

HttpListener sınıfının yeni bir örneğini başlatır.

Özellikler

Name Description
AuthenticationSchemes

İstemcilerin kimliğini doğrulamak için kullanılan düzeni alır veya ayarlar.

AuthenticationSchemeSelectorDelegate

İstemcilerin kimliğini doğrulamak için kullanılan protokolü belirlemek için çağrılan temsilciyi alır veya ayarlar.

DefaultServiceNames

Kayıtlı ön eklerle belirlenen Hizmet Sağlayıcısı Adlarının (SPN) varsayılan listesini alır.

ExtendedProtectionPolicy

Bir oturum için genişletilmiş koruma için kullanılacak öğesini ExtendedProtectionPolicy alır veya ayarlar.

ExtendedProtectionSelectorDelegate

Her istek için kullanılacak öğesini belirlemek ExtendedProtectionPolicy için çağrılan temsilciyi alır veya ayarlar.

IgnoreWriteExceptions

Bir istemciye yanıt gönderdiğinde uygulamanızın özel durumlar alıp almadığını belirten bir BooleanHttpListener değer alır veya ayarlar.

IsListening

Başlatılıp HttpListener başlatılmadığını gösteren bir değer alır.

IsSupported

Geçerli işletim sistemiyle kullanılıp HttpListener kullanılamayacağını gösteren bir değer alır.

Prefixes

Bu HttpListener nesne tarafından işlenen Tekdüzen Kaynak Tanımlayıcısı (URI) ön eklerini alır.

Realm

Bu HttpListener nesneyle ilişkili bölge veya kaynak bölümünü alır veya ayarlar.

TimeoutManager

Bu HttpListener örneğin zaman aşımı yöneticisi.

UnsafeConnectionNtlmAuthentication

NTLM kullanıldığında kimlik doğrulaması için aynı İletim Denetimi Protokolü (TCP) bağlantısını kullanan ek isteklerin gerekip gerekmediğini denetleyebilen bir Boolean değer alır veya ayarlar.

Yöntemler

Name Description
Abort()

Şu anda kuyruğa alınmış tüm istekleri atarak nesneyi hemen kapatır HttpListener .

BeginGetContext(AsyncCallback, Object)

Gelen isteği zaman uyumsuz olarak almaya başlar.

Close()

öğesini kapatır HttpListener.

EndGetContext(IAsyncResult)

Gelen istemci isteğini almak için zaman uyumsuz bir işlemi tamamlar.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetContext()

Gelen bir isteği bekler ve bir istek alındığında döndürür.

GetContextAsync()

Zaman uyumsuz işlem olarak gelen bir isteği bekler.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
Start()

Bu örneğin gelen istekleri almasına izin verir.

Stop()

Bu örneğin yeni gelen istekleri almayı durdurmasına neden olur ve devam eden tüm isteklerin işlenmesini sonlandırır.

ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

Name Description
IDisposable.Dispose()

Bu HttpListener nesne tarafından tutulan kaynakları serbest bırakır.

Şunlara uygulanır

Ayrıca bkz.