HttpListener Klasse

Definition

Stellt einen einfachen, programmgesteuerten HTTP-Protokolllistener bereit. Diese Klasse kann nicht vererbt werden.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Vererbung
HttpListener
Implementiert

Beispiele

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

Hinweise

Mithilfe der HttpListener Klasse können Sie einen einfachen HTTP-Protokolllistener erstellen, der auf HTTP-Anforderungen reagiert. Der Listener ist für die Lebensdauer des HttpListener Objekts aktiv und wird in Ihrer Anwendung mit seinen Berechtigungen ausgeführt.

Um HttpListener zu verwenden, erstellen Sie eine neue Instanz der Klasse mit dem HttpListener Konstruktor. Verwenden Sie die Prefixes Eigenschaft, um Zugriff auf die Sammlung zu erhalten, welche die Zeichenfolgen enthält, die festlegen, welche URIPräfixe (Uniform Resource Identifier) vom HttpListener verarbeitet werden sollen.

Eine URI-Präfixzeichenfolge besteht aus einem Schema (http oder https), einem Host, einem optionalen Port und einem optionalen Pfad. Ein Beispiel für eine vollständige Präfixzeichenfolge ist http://www.contoso.com:8080/customerData/. Präfixe müssen in einem Schrägstrich ("/") enden. Das HttpListener Objekt mit dem Präfix, das am ehesten mit einem angeforderten URI übereinstimmt, antwortet auf die Anforderung. Mehrere HttpListener Objekte können dasselbe Präfix nicht hinzufügen. Eine Win32Exception Ausnahme wird ausgelöst, wenn ein HttpListener bereits verwendetes Präfix hinzugefügt wird.

Falls ein Port angegeben ist, kann das Hostelement durch "*" ersetzt werden, um anzugeben, dass HttpListener die Anforderungen akzeptiert, die an den Port gesendet werden, wenn der angeforderte URI keinem anderen Präfix entspricht. Um beispielsweise alle Anforderungen zu empfangen, die an Port 8080 gesendet werden, wenn der angeforderte URI nicht von einem HttpListenerverarbeitet wird, lautet das Präfix http://*:8080/. Um anzugeben, dass das HttpListener alle Anforderungen akzeptiert, die an einen Port gesendet werden, ersetzen Sie das Hostelement durch das Zeichen "+". Beispiel: https://+:8080 Die Zeichen "*" und "+" können in Präfixen vorhanden sein, die Pfade enthalten.

Wildcard-Unterdomänen werden in URI-Präfixen unterstützt, die von einem HttpListener Objekt verwaltet werden. Verwenden Sie zum Angeben einer Wildcard-Unterdomäne das Zeichen "*" als Teil des Hostnamens in einem URI-Präfix. Beispiel: http://*.foo.com/. Übergeben Sie dies als Argument an die Add Methode.

Warning

Wildcardbindungen auf oberster Ebene (http://*:8080/ und http://+:8080) sollten nicht verwendet werden. Platzhalterbindungen auf oberster Ebene gefährden die Sicherheit Ihrer App. Dies gilt für starke und schwache Platzhalter. Verwenden Sie statt Platzhaltern explizite Hostnamen. Platzhalterbindungen in untergeordneten Domänen (z.B. *.mysub.com) verursachen kein Sicherheitsrisiko, wenn Sie die gesamte übergeordnete Domäne steuern (im Gegensatz zu *.com, das angreifbar ist). Weitere Informationen finden Sie unter rfc7230 Section-5.4 .

Um mit dem Empfangen von Anforderungen von Clients zu beginnen, fügen Sie die URI-Präfixe der Auflistung hinzu und rufen Sie die Methode Start auf. HttpListener bietet synchrone und asynchrone Modelle für die Verarbeitung von Clientanforderungen. Anforderungen und deren zugehörige Antworten werden über das HttpListenerContext-Objekt abgerufen, das von der GetContext-Methode oder ihren asynchronen Gegenstücken, den BeginGetContext- und EndGetContext-Methoden, zurückgegeben wird.

Das synchrone Modell ist geeignet, wenn Ihre Anwendung blockiert werden soll, während Sie auf eine Clientanforderung warten und nur jeweils eine Anforderung verarbeiten möchten. Rufen Sie mithilfe des synchronen Modells die GetContext Methode auf, die wartet, bis ein Client eine Anforderung sendet. Die Methode gibt ein HttpListenerContext-Objekt zur Verarbeitung zurück, wenn eines auftritt.

Im komplexeren asynchronen Modell blockiert Ihre Anwendung nicht, während sie auf Anforderungen wartet, und jede Anforderung wird in einem eigenen Ausführungsthread verarbeitet. Verwenden Sie die BeginGetContext Methode, um eine anwendungsdefinierte Methode anzugeben, die für jede eingehende Anforderung aufgerufen werden soll. Rufen Sie in dieser Methode die EndGetContext Methode auf, um die Anforderung abzurufen, sie zu verarbeiten und zu antworten.

In beiden Modellen wird mithilfe der HttpListenerContext.Request Eigenschaft auf eingehende Anforderungen zugegriffen und durch HttpListenerRequest Objekte dargestellt. Ebenso wird auf Antworten mithilfe der HttpListenerContext.Response Eigenschaft zugegriffen und durch HttpListenerResponse Objekte dargestellt. Diese Objekte teilen einige Funktionen mit den HttpWebRequest und HttpWebResponse Objekten, die letzteren Objekte können jedoch nicht zusammen mit HttpListener verwendet werden, da sie clientseitige und nicht serverseitige Verhaltensweisen implementieren.

Eine HttpListener kann eine Clientauthentifizierung erfordern. Sie können entweder ein bestimmtes Schema angeben, das für die Authentifizierung verwendet werden soll, oder Sie können einen Delegaten angeben, der das zu verwendende Schema bestimmt. Sie müssen eine Form der Authentifizierung benötigen, um Informationen zur Identität des Clients abzurufen. Weitere Informationen finden Sie unter " User, AuthenticationSchemes" und AuthenticationSchemeSelectorDelegate "Eigenschaften".

Note

Wenn Sie ein HttpListener https-Objekt erstellen, müssen Sie ein Serverzertifikat für diesen Listener auswählen. Andernfalls werden Anfragen an dieses HttpListener mit einem unerwarteten Schließen der Verbindung fehlschlagen.

Note

Sie können Serverzertifikate und andere Listeneroptionen mithilfe der Netzwerkshell (netsh.exe) konfigurieren. Weitere Informationen finden Sie unter Network Shell (Netsh ). Die ausführbare Datei wurde zusammen mit Windows Server 2008 und Windows Vista ausgeliefert.

Note

Wenn Sie mehrere Authentifizierungsschemas für die HttpListenerDatei angeben, fordert der Listener Clients in der folgenden Reihenfolge heraus: Negotiate, , NTLM, Digestund dann Basic.

HTTP.sys

Die HttpListener Klasse basiert auf HTTP.sysdem Kernelmoduslistener, der den gesamten HTTP-Datenverkehr für Windows verarbeitet. HTTP.sys bietet Verbindungsverwaltung, Bandbreiteneinschränkung und Webserverprotokollierung. Verwenden Sie das toolHttpCfg.exe , um SSL-Zertifikate hinzuzufügen.

Ab .NET 11 unterstützt die Windows-Implementierung HTTP.sys das Aktivieren von HttpListener Antwortpuffern auf Kernelebene. Wenn diese Option aktiviert ist, werden die Antwortdaten von HTTP.sys gepuffert, bevor sie an den Client gesendet werden, wodurch der Durchsatz für Verbindungen mit hoher Latenz verbessert werden kann. Dies kann durch Aufrufen der AppContext.SetSwitch Methode wie folgt aktiviert werden:

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

Konstruktoren

Name Beschreibung
HttpListener()

Initialisiert eine neue Instanz der HttpListener-Klasse.

Eigenschaften

Name Beschreibung
AuthenticationSchemes

Ruft ab oder legt das Schema fest, das zum Authentifizieren von Clients verwendet wird.

AuthenticationSchemeSelectorDelegate

Ruft den aufgerufenen Delegaten ab, um das Protokoll zu bestimmen, das für die Authentifizierung von Clients verwendet wird, oder legt diesen fest.

DefaultServiceNames

Ruft eine Standardliste von Dienstanbieternamen (SPNs) ab, die durch registrierte Präfixe bestimmt wird.

ExtendedProtectionPolicy

Ruft den erweiterten Schutz für eine Sitzung ab oder legt sie ExtendedProtectionPolicy fest.

ExtendedProtectionSelectorDelegate

Ruft den aufgerufenen Delegaten ab, um die ExtendedProtectionPolicy für jede Anforderung zu verwendende Stellvertretung zu bestimmen, oder legt diesen fest.

IgnoreWriteExceptions

Dient zum Abrufen oder Festlegen eines Boolean Werts, der angibt, ob Ihre Anwendung Ausnahmen empfängt, die auftreten, wenn eine HttpListener Antwort an den Client gesendet wird.

IsListening

Ruft einen Wert ab, der angibt, ob HttpListener gestartet wurde.

IsSupported

Ruft einen Wert ab, der angibt, ob HttpListener mit dem aktuellen Betriebssystem verwendet werden kann.

Prefixes

Ruft die URI-Präfixe (Uniform Resource Identifier) ab, die von diesem HttpListener Objekt behandelt werden.

Realm

Ruft den Bereich oder die Ressourcenpartition ab, die diesem HttpListener Objekt zugeordnet ist, oder legt diesen fest.

TimeoutManager

Der Timeout-Manager für diese HttpListener Instanz.

UnsafeConnectionNtlmAuthentication

Dient zum Abrufen oder Festlegen eines Boolean Werts, der steuert, ob bei Verwendung von NTLM zusätzliche Anforderungen mit derselben TCP-Verbindung (Transmission Control Protocol) für die Authentifizierung erforderlich sind.

Methoden

Name Beschreibung
Abort()

Beendet das HttpListener Objekt sofort, wobei alle aktuell in die Warteschlange gestellten Anforderungen verworfen werden.

BeginGetContext(AsyncCallback, Object)

Beginnt asynchrones Abrufen einer eingehenden Anforderung.

Close()

Beendet das HttpListener.

EndGetContext(IAsyncResult)

Führt einen asynchronen Vorgang aus, um eine eingehende Clientanforderung abzurufen.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetContext()

Wartet auf eine eingehende Anforderung und gibt zurück, wenn eine empfangen wird.

GetContextAsync()

Wartet auf eine eingehende Anforderung als asynchroner Vorgang.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
Start()

Ermöglicht dieser Instanz, eingehende Anforderungen zu empfangen.

Stop()

Bewirkt, dass diese Instanz den Empfang neuer eingehender Anforderungen beendet und die Verarbeitung aller laufenden Anforderungen beendet.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

Name Beschreibung
IDisposable.Dispose()

Gibt die Ressourcen frei, die von diesem HttpListener Objekt gehalten werden.

Gilt für:

Weitere Informationen