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

Im folgenden Codebeispiel wird die Verwendung von HttpListenerveranschaulicht.

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

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

Um zu verwenden HttpListener, erstellen Sie eine neue Instanz der -Klasse mithilfe des HttpListener Konstruktors, und verwenden Sie die Prefixes -Eigenschaft, um Zugriff auf die Auflistung zu erhalten, die die Zeichenfolgen enthält, die angeben, welche Präfixe des Uniform Resource Identifier (URI) für den HttpListener Prozess verwendet 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 einem angeforderten URI am ehesten entspricht, antwortet auf die Anforderung. Mehrere HttpListener Objekte können dasselbe Präfix nicht hinzufügen. Eine Win32Exception Ausnahme wird ausgelöst, wenn ein HttpListener ein Präfix hinzufügt, das bereits verwendet wird.

Wenn ein Port angegeben wird, kann das Hostelement durch "*" ersetzt werden, um anzugeben, dass die HttpListener an den Port gesendeten Anforderungen akzeptiert, 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 von keinem HttpListenerverarbeitet wird, lautet das Präfix http://*:8080/. Um anzugeben, dass alle Anforderungen akzeptiert werden, die HttpListener 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.

Ab .NET Core 2.0 oder .NET Framework 4.6 auf Windows 10 werden Platzhalterunterdomänen in URI-Präfixen unterstützt, die von einem HttpListener Objekt verwaltet werden. Um eine Platzhalterunterdomäne anzugeben, verwenden Sie das Zeichen "*" als Teil des Hostnamens in einem URI-Präfix. Beispiel : http://*.foo.com/. Übergeben Sie dies als Argument an die Add -Methode. Dies funktioniert ab .NET Core 2.0 oder .NET Framework 4.6 auf Windows 10. In früheren Versionen wird dadurch ein HttpListenerExceptiongeneriert.

Warnung

Platzhalterbindungen der obersten 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 im Abschnitt 5.4.

Um mit dem Lauschen auf Anforderungen von Clients zu beginnen, fügen Sie der Auflistung die URI-Präfixe hinzu, und rufen Sie die -Methode auf Start . HttpListener bietet synchrone und asynchrone Modelle für die Verarbeitung von Clientanforderungen. Auf Anforderungen und die zugehörigen Antworten wird mithilfe des Objekts zugegriffen, das HttpListenerContext von der -Methode oder ihren GetContext asynchronen Entsprechungen, den BeginGetContext Methoden und EndGetContext zurückgegeben wird.

Das synchrone Modell ist geeignet, wenn Ihre Anwendung während des Wartens auf eine Clientanforderung blockieren soll und wenn Sie nur eine Anforderung gleichzeitig 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 innerhalb dieser Methode die EndGetContext -Methode auf, um die Anforderung abzurufen, zu verarbeiten und zu antworten.

In beiden Modellen wird über die HttpListenerContext.Request -Eigenschaft auf eingehende Anforderungen zugegriffen und durch HttpListenerRequest Objekte dargestellt. Auf ähnliche Weise wird mit der HttpListenerContext.Response -Eigenschaft auf Antworten zugegriffen und durch HttpListenerResponse Objekte dargestellt. Diese Objekte teilen einige Funktionen mit den HttpWebRequest - und HttpWebResponse -Objekten, aber die letztgenannten Objekte können nicht in Verbindung mit HttpListener verwendet werden, da sie Client- und nicht Serververhalten implementieren.

Ein 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 Delegat angeben, der das zu verwendende Schema bestimmt. Sie müssen eine Form der Authentifizierung benötigen, um Informationen über die Identität des Clients abzurufen. Weitere Informationen finden Sie in den UserEigenschaften , AuthenticationSchemesund AuthenticationSchemeSelectorDelegate .

Hinweis

Wenn Sie ein HttpListener mit https erstellen, müssen Sie ein Serverzertifikat für diesen Listener auswählen. Andernfalls schlagen Anforderungen daran HttpListener fehl, wenn die Verbindung unerwartet geschlossen wird.

Hinweis

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 mit Windows Server 2008 und Windows Vista versendet.

Hinweis

Wenn Sie mehrere Authentifizierungsschemas für HttpListenerangeben, 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, Bandbreitendrosselung und Webserverprotokollierung. Verwenden Sie das HttpCfg.exe-Tool , um SSL-Zertifikate hinzuzufügen.

Konstruktoren

HttpListener()

Initialisiert eine neue Instanz der HttpListener-Klasse.

Eigenschaften

AuthenticationSchemes

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

AuthenticationSchemeSelectorDelegate

Ruft den Delegaten ab, der zum Bestimmen des für die Authentifizierung von Clients verwendeten Protokolls aufgerufen wird, oder legt diesen fest.

DefaultServiceNames

Ruft entsprechend den registrierten Präfixen eine Standardliste von Dienstanbieternamen (Service Provider Names, SPNs) ab.

ExtendedProtectionPolicy

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

ExtendedProtectionSelectorDelegate

Ruft den Delegaten ab, der aufgerufen wird, um die ExtendedProtectionPolicy für jede Anforderung zu bestimmen, oder legt ihn fest.

IgnoreWriteExceptions

Ruft einen Boolean-Wert ab, der angibt, ob die Anwendung Ausnahmen empfängt, die auftreten, wenn ein HttpListener die Antwort an den Client sendet, oder legt diesen fest.

IsListening

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

IsSupported

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

Prefixes

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

Realm

Ruft den Bereich oder die Ressourcenpartition ab, der bzw. die diesem HttpListener-Objekt zugeordnet ist, oder legt den Bereich bzw. die Partition fest.

TimeoutManager

Der Timeout-Manager für diese HttpListener Instanz .

UnsafeConnectionNtlmAuthentication

Ruft einen Boolean-Wert ab, der steuert, ob bei Verwendung von NTLM zusätzliche Anforderungen, die dieselbe TCP (Transmission Control Protocol)-Verbindung verwenden, authentifiziert werden müssen, oder legt diesen fest.

Methoden

Abort()

Beendet sofort das HttpListener-Objekt und verwirft alle Anforderungen, die sich gegenwärtig in der Warteschlange befinden.

BeginGetContext(AsyncCallback, Object)

Startet den asynchronen Abruf einer eingehenden Anforderung.

Close()

Fährt den HttpListener herunter.

EndGetContext(IAsyncResult)

Schließt einen asynchronen Vorgang ab, um eine eingehende Clientanforderung abzurufen.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetContext()

Wartet auf eine eingehende Anforderung und wird beendet, wenn eine Anforderung empfangen wird.

GetContextAsync()

Wartet auf eine eingehende Anforderung als asynchrone Operation.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Start()

Ermöglicht das Empfangen eingehender Anforderungen durch diese Instanz.

Stop()

Bewirkt, dass diese Instanz keine neuen eingehenden Anforderungen mehr empfängt, und beendet die Verarbeitung aller laufenden Anforderungen.

ToString()

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

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IDisposable.Dispose()

Gibt die für dieses HttpListener-Objekt reservierten Ressourcen frei.

Gilt für

Siehe auch