HttpListener Klasse

Definition

Stellt einen einfachen, programmgesteuerten HTTP-Protokolllistener bereit.Provides a simple, programmatically controlled HTTP protocol listener. Diese Klasse kann nicht vererbt werden.This class cannot be inherited.

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 veranschaulicht HttpListener .The following code example demonstrates using a 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 antwortet.Using the HttpListener class, you can create a simple HTTP protocol listener that responds to HTTP requests. Der Listener ist für die Lebensdauer des HttpListener -Objekts aktiv und wird innerhalb der Anwendung mit seinen Berechtigungen ausgeführt.The listener is active for the lifetime of the HttpListener object and runs within your application with its permissions.

Erstellen Sie zum verwenden HttpListener von eine neue Instanz der-Klasse mit dem HttpListener -Konstruktor, und verwenden Sie die- Prefixes Eigenschaft, um Zugriff auf die Auflistung zu erhalten, die die Zeichen folgen enthält, die angeben, welche Uniform Resource Identifier (URI) Präfixe der HttpListener verarbeiten soll.To use HttpListener, create a new instance of the class using the HttpListener constructor and use the Prefixes property to gain access to the collection that holds the strings that specify which Uniform Resource Identifier (URI) prefixes the HttpListener should process.

Eine URI-Präfix Zeichenfolge besteht aus einem Schema (http oder HTTPS), einem Host, einem optionalen Port und einem optionalen Pfad.A URI prefix string is composed of a scheme (http or https), a host, an optional port, and an optional path. Ein Beispiel für eine komplette Präfix Zeichenfolge ist http://www.contoso.com:8080/customerData/ .An example of a complete prefix string is http://www.contoso.com:8080/customerData/. Präfixe müssen mit einem Schrägstrich ("/") enden.Prefixes must end in a forward slash ("/"). Das- HttpListener Objekt mit dem Präfix, das am ehesten mit einem angeforderten URI übereinstimmt, antwortet auf die Anforderung.The HttpListener object with the prefix that most closely matches a requested URI responds to the request. Mehrere HttpListener Objekte können nicht dasselbe Präfix hinzufügen Win32Exception . eine-Ausnahme wird ausgelöst, wenn ein HttpListener ein Präfix hinzufügt, das bereits verwendet wird.Multiple HttpListener objects cannot add the same prefix; a Win32Exception exception is thrown if a HttpListener adds a prefix that is already in use.

Wenn ein Port angegeben wird, kann das Host Element durch "" ersetzt werden, * um anzugeben, dass die HttpListener an den Port gesendeten Anforderungen akzeptiert, wenn der angeforderte URI keinem anderen Präfix entspricht.When a port is specified, the host element can be replaced with "*" to indicate that the HttpListener accepts requests sent to the port if the requested URI does not match any other prefix. Wenn Sie z. b. alle Anforderungen empfangen möchten, die an den Port 8080 gesendet werden, wenn der angeforderte URI von keinem behandelt wird HttpListener , ist das Präfix http:// * : 8080/.For example, to receive all requests sent to port 8080 when the requested URI is not handled by any HttpListener, the prefix is http://*:8080/. Um anzugeben, dass das- HttpListener Element alle an einen Port gesendeten Anforderungen akzeptiert, ersetzen Sie das-Host Element durch das Zeichen "+".Similarly, to specify that the HttpListener accepts all requests sent to a port, replace the host element with the "+" character. Beispiel: https://+:8080For example, https://+:8080. Die * Zeichen "" und "+" können in Präfixen vorhanden sein, die Pfade enthalten.The "*" and "+" characters can be present in prefixes that include paths.

Ab .net Core 2,0 oder .NET Framework 4,6 unter Windows 10 werden Platzhalter Unterdomänen in URI-Präfixen unterstützt, die von einem-Objekt verwaltet werden HttpListener .Starting with .NET Core 2.0 or .NET Framework 4.6 on Windows 10, wildcard subdomains are supported in URI prefixes that are managed by an HttpListener object. Um eine Platzhalter Unterdomäne anzugeben, verwenden Sie das * Zeichen "" als Teil des Hostnamens in einem URI-Präfix.To specify a wildcard subdomain, use the "*" character as part of the hostname in a URI prefix. Beispiel: http:// * . foo.com/.For example, http://*.foo.com/. Übergeben Sie dies als Argument an die- Add Methode.Pass this as the argument to the Add method. Dies funktioniert ab .net Core 2,0 oder .NET Framework 4,6 unter Windows 10. in früheren Versionen wird hierdurch eine generiert HttpListenerException .This works as of .NET Core 2.0 or .NET Framework 4.6 on Windows 10; in earlier versions, this generates an HttpListenerException.

Warnung

Platzhalter Bindungen auf oberster Ebene (http:// * : 8080/ and http://+:8080 ) dürfen nicht verwendet werden.Top-level wildcard bindings (http://*:8080/ and http://+:8080) should not be used. Platzhalterbindungen auf oberster Ebene gefährden die Sicherheit Ihrer App.Top-level wildcard bindings can open up your app to security vulnerabilities. Dies gilt für starke und schwache Platzhalter.This applies to both strong and weak wildcards. Verwenden Sie statt Platzhaltern explizite Hostnamen.Use explicit host names rather than wildcards. 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).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Weitere Informationen finden Sie unter rfc7230 im Abschnitt 5.4.See rfc7230 section-5.4 for more information.

Fügen Sie der-Auflistung die URI-Präfixe hinzu, und rufen Sie die-Methode auf, um mit dem lauschen von Clients zu beginnen Start .To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListener bietet synchrone und asynchrone Modelle für die Verarbeitung von Client Anforderungen.HttpListener offers both synchronous and asynchronous models for processing client requests. Auf Anforderungen und ihre zugehörigen Antworten wird mithilfe des HttpListenerContext -Objekts zugegriffen, das von der GetContext -Methode oder Ihren asynchronen Entsprechungen, den BeginGetContext -und- EndGetContext Methoden zurückgegeben wirdRequests and their associated responses are accessed using the HttpListenerContext object returned by the GetContext method or its asynchronous counterparts, the BeginGetContext and EndGetContext methods.

Das synchrone Modell ist geeignet, wenn die Anwendung während des Wartens auf eine Client Anforderung blockiert werden soll, und wenn Sie jeweils nur eine Anforderung verarbeiten möchten.The synchronous model is appropriate if your application should block while waiting for a client request and if you want to process only one request at a time. Verwenden Sie das synchrone Modell, um die-Methode aufzurufen GetContext , die darauf wartet, dass ein Client eine Anforderung sendet.Using the synchronous model, call the GetContext method, which waits for a client to send a request. Die-Methode gibt ein- HttpListenerContext Objekt für die Verarbeitung zurück, wenn ein solches auftritt.The method returns an HttpListenerContext object to you for processing when one occurs.

Im komplexeren asynchronen Modell wird Ihre Anwendung nicht blockiert, während auf Anforderungen gewartet wird, und jede Anforderung wird in einem eigenen Ausführungs Thread verarbeitet.In the more complex asynchronous model, your application does not block while waiting for requests and each request is processed in its own execution thread. Verwenden BeginGetContext Sie die-Methode, um eine Anwendungs definierte Methode anzugeben, die für jede eingehende Anforderung aufgerufen werden soll.Use the BeginGetContext method to specify an application-defined method to be called for each incoming request. Rufen Sie in dieser Methode die- EndGetContext Methode auf, um die Anforderung zu erhalten, zu verarbeiten und zu antworten.Within that method, call the EndGetContext method to obtain the request, process it, and respond.

In beiden Modellen wird auf eingehende Anforderungen mithilfe der HttpListenerContext.Request -Eigenschaft zugegriffen, und Sie werden durch- HttpListenerRequest Objekte dargestellt.In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. Auf ähnliche Weise wird auf Antworten mithilfe der HttpListenerContext.Response -Eigenschaft zugegriffen, und Sie werden durch- HttpListenerResponse Objekte dargestellt.Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. Diese Objekte verfügen über einige Funktionen mit dem HttpWebRequest -Objekt und dem- HttpWebResponse Objekt, aber die letzteren Objekte können nicht in Verbindung mit verwendet werden, HttpListener da Sie Client-und nicht Server Verhalten implementieren.These objects share some functionality with the HttpWebRequest and HttpWebResponse objects, but the latter objects cannot be used in conjunction with HttpListener because they implement client, not server, behaviors.

Ein HttpListener kann eine Client Authentifizierung erfordern.An HttpListener can require client authentication. 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.You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. Zum Abrufen von Informationen über die Identität des Clients benötigen Sie eine bestimmte Form der Authentifizierung.You must require some form of authentication to obtain information about the client's identity. Weitere Informationen finden Sie in den User AuthenticationSchemes Eigenschaften, und AuthenticationSchemeSelectorDelegate .For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

Hinweis

Wenn Sie ein HttpListener mithilfe von HTTPS erstellen, müssen Sie ein Server Zertifikat für diesen Listener auswählen.If you create an HttpListener using https, you must select a Server Certificate for that listener. Andernfalls schlägt eine HttpWebRequest Abfrage HttpListener mit einem unerwarteten Verbindungs Ende fehl.Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.

Hinweis

Mithilfe der Netzwerkshell (netsh.exe) können Sie Server Zertifikate und andere Listeneroptionen konfigurieren.You can configure Server Certificates and other listener options by using Network Shell (netsh.exe). Weitere Informationen finden Sie unter Network Shell (Netsh) .See Network Shell (Netsh) for more details. Die ausführbare Datei wurde mit Windows Server 2008 und Windows Vista ausgeliefert.The executable began shipping with Windows Server 2008 and Windows Vista.

Hinweis

Wenn Sie mehrere Authentifizierungs Schemas für angeben HttpListener , führt der Listener Clients in der folgenden Reihenfolge aus: Negotiate , NTLM , Digest und dann Basic .If you specify multiple authentication schemes for the HttpListener, the listener will challenge clients in the following order: Negotiate, NTLM, Digest, and then Basic.

HTTP.sysHTTP.sys

Die HttpListener -Klasse basiert auf, wobei HTTP.sys es sich um den Kernelmoduslistener handelt, der den gesamten HTTP-Datenverkehr für Windows verarbeitet.The HttpListener class is built on top of HTTP.sys, which is the kernel mode listener that handles all HTTP traffic for Windows. HTTP.sys bietet Verbindungs Verwaltung, Bandbreiten Einschränkung und Webserver Protokollierung.HTTP.sys provides connection management, bandwidth throttling, and web server logging. Verwenden Sie das HttpCfg.exe Tool zum Hinzufügen von SSL-Zertifikaten.Use the HttpCfg.exe tool to add SSL certificates.

Konstruktoren

HttpListener()

Initialisiert eine neue Instanz der HttpListener-Klasse.Initializes a new instance of the HttpListener class.

Eigenschaften

AuthenticationSchemes

Ruft das Schema ab, das zum Authentifizieren von Clients verwendet wird, oder legt dieses fest.Gets or sets the scheme used to authenticate clients.

AuthenticationSchemeSelectorDelegate

Ruft den Delegaten ab, der zum Bestimmen des für die Authentifizierung von Clients verwendeten Protokolls aufgerufen wird, oder legt diesen fest.Gets or sets the delegate called to determine the protocol used to authenticate clients.

DefaultServiceNames

Ruft entsprechend den registrierten Präfixen eine Standardliste von Dienstanbieternamen (Service Provider Names, SPNs) ab.Gets a default list of Service Provider Names (SPNs) as determined by registered prefixes.

ExtendedProtectionPolicy

Ruft die ExtendedProtectionPolicy für den erweiterten Schutz einer Sitzung ab oder legt sie fest.Gets or sets the ExtendedProtectionPolicy to use for extended protection for a session.

ExtendedProtectionSelectorDelegate

Ruft den Delegaten ab, der aufgerufen wird, um die ExtendedProtectionPolicy für jede Anforderung zu bestimmen, oder legt ihn fest.Gets or sets the delegate called to determine the ExtendedProtectionPolicy to use for each request.

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.Gets or sets a Boolean value that specifies whether your application receives exceptions that occur when an HttpListener sends the response to the client.

IsListening

Ruft einen Wert ab, der angibt, ob der HttpListener gestartet wurde.Gets a value that indicates whether HttpListener has been started.

IsSupported

Ruft einen Wert ab, der angibt, ob HttpListener mit dem aktuellen Betriebssystem verwendet werden kann.Gets a value that indicates whether HttpListener can be used with the current operating system.

Prefixes

Ruft die von diesem HttpListener-Objekt behandelten URI-Präfixe (Uniform Resource Identifier) ab.Gets the Uniform Resource Identifier (URI) prefixes handled by this HttpListener object.

Realm

Ruft den Bereich oder die Ressourcenpartition ab, der bzw. die diesem HttpListener-Objekt zugeordnet ist, oder legt den Bereich bzw. die Partition fest.Gets or sets the realm, or resource partition, associated with this HttpListener object.

TimeoutManager

Der Timeout-Manager für diese HttpListener Instanz .The timeout manager for this HttpListener instance.

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.Gets or sets a Boolean value that controls whether, when NTLM is used, additional requests using the same Transmission Control Protocol (TCP) connection are required to authenticate.

Methoden

Abort()

Beendet sofort das HttpListener-Objekt und verwirft alle Anforderungen, die sich gegenwärtig in der Warteschlange befinden.Shuts down the HttpListener object immediately, discarding all currently queued requests.

BeginGetContext(AsyncCallback, Object)

Startet den asynchronen Abruf einer eingehenden Anforderung.Begins asynchronously retrieving an incoming request.

Close()

Fährt den HttpListener herunter.Shuts down the HttpListener.

EndGetContext(IAsyncResult)

Schließt einen asynchronen Vorgang ab, um eine eingehende Clientanforderung abzurufen.Completes an asynchronous operation to retrieve an incoming client request.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.Determines whether the specified object is equal to the current object.

(Geerbt von Object)
GetContext()

Wartet auf eine eingehende Anforderung und wird beendet, wenn eine Anforderung empfangen wird.Waits for an incoming request and returns when one is received.

GetContextAsync()

Wartet auf eine eingehende Anforderung als asynchrone Operation.Waits for an incoming request as an asynchronous operation.

GetHashCode()

Dient als die Standard-HashfunktionServes as the default hash function.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
Start()

Ermöglicht das Empfangen eingehender Anforderungen durch diese Instanz.Allows this instance to receive incoming requests.

Stop()

Bewirkt, dass diese Instanz keine neuen eingehenden Anforderungen mehr empfängt, und beendet die Verarbeitung aller laufenden Anforderungen.Causes this instance to stop receiving new incoming requests and terminates processing of all ongoing requests.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IDisposable.Dispose()

Gibt die für dieses HttpListener-Objekt reservierten Ressourcen frei.Releases the resources held by this HttpListener object.

Gilt für:

Weitere Informationen