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 einer HttpListener.

// 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 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 Uniform Resource Identifier (URI) Präfixe 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 häufigsten mit einem angeforderten URI übereinstimmt, antwortet auf die Anforderung. Mehrere HttpListener Objekte können dasselbe Präfix nicht hinzufügen. Eine Ausnahme wird ausgelöst, wenn ein Win32Exception HttpListener bereits verwendetes Präfix hinzugefügt wird.

Wenn ein Port angegeben wird, kann das Hostelement durch "*" ersetzt werden, um anzugeben, dass die an den Port gesendeten Anforderungen akzeptiert werden, wenn der HttpListener angeforderte URI nicht mit einem anderen Präfix übereinstimmt. Um beispielsweise alle an Port 8080 gesendeten Anforderungen zu empfangen, wenn der angeforderte URI nicht von irgendeinem HttpListenerbehandelt wird, ist das Präfix http://*:8080/. Um anzugeben, dass die HttpListener an einen Port gesendeten Anforderungen akzeptiert 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 Wildcard-Unterdomänen 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. Beispielsweise http://*.foo.com/. Übergeben Sie dies als Argument an die Add Methode. Dies funktioniert als .NET Core 2.0 oder .NET Framework 4.6 auf Windows 10; in früheren Versionen generiert dies eine HttpListenerException.

Warnung

Bindungen 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 im Abschnitt 5.4.

Um mit der Überwachung von Anforderungen von Clients zu beginnen, fügen Sie die URI-Präfixe zur Auflistung hinzu, und rufen Sie die Start Methode auf. HttpListener bietet sowohl synchrone als auch asynchrone Modelle für die Verarbeitung von Clientanforderungen. Anforderungen und deren zugeordnete Antworten werden mithilfe des von der HttpListenerContext Methode oder ihren asynchronen Gegenstücken zurückgegebenen Objekts, den GetContext und EndGetContext den BeginGetContext Methoden zugegriffen.

Das synchrone Modell ist geeignet, wenn Ihre Anwendung während des Wartens auf eine Clientanforderung blockieren sollte und wenn Sie nur eine Anforderung gleichzeitig verarbeiten möchten. Rufen Sie mithilfe des synchronen Modells die Methode auf, die GetContext auf einen Client wartet, um eine Anforderung zu senden. Die Methode gibt ein HttpListenerContext Objekt für die Verarbeitung zurück, wenn eine auftritt.

Im komplexeren asynchronen Modell blockiert Ihre Anwendung nicht, während Sie auf Anforderungen warten und jede Anforderung in einem eigenen Ausführungsthread verarbeitet wird. 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 Methode auf, um die EndGetContext Anforderung abzurufen, sie zu verarbeiten und zu reagieren.

In beiden Modellen werden eingehende Anforderungen mithilfe der HttpListenerContext.Request Eigenschaft zugegriffen und werden durch HttpListenerRequest Objekte dargestellt. Ebenso werden Antworten mithilfe der HttpListenerContext.Response Eigenschaft zugegriffen und werden durch HttpListenerResponse Objekte dargestellt. Diese Objekte teilen einige Funktionen mit den HttpWebRequest HttpWebResponse Und Objekten, aber die letzten Objekte können nicht in Verbindung mit HttpListener dem Client verwendet werden, da sie Client- und nicht Serververhalten implementieren.

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

Hinweis

Wenn Sie ein HttpListener https-Objekt erstellen, müssen Sie ein Serverzertifikat für diesen Listener auswählen. Andernfalls schlägt eine HttpWebRequest Abfrage dieser HttpListener Abfrage mit einer unerwarteten Schließung der Verbindung fehl.

Hinweis

Sie können Serverzertifikate und andere Listeneroptionen mithilfe der Netzwerkshell (netsh.exe) konfigurieren. Weitere Details finden Sie unter Netzwerkshell (Netsh). Die ausführbare Datei begann mit Windows Server 2008 und Windows Vista zu versenden.

Hinweis

Wenn Sie mehrere Authentifizierungsschemas für das HttpListenerangeben, fordert der Listener Clients in der folgenden Reihenfolge heraus: Negotiate, NTLM``Digestund dann Basic.

HTTP.sys

Die HttpListener Klasse basiert auf HTTP.sysdem Kernelmodus-Listener, der alle HTTP-Datenverkehr für Windows behandelt. 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