HttpListener HttpListener HttpListener HttpListener Class

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
HttpListenerHttpListenerHttpListenerHttpListener
Implementiert

Beispiele

Im folgenden Codebeispiel wird die Verwendung HttpListenervon veranschaulicht.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 HttpListenerzum Verwenden von eine neue Instanz der-Klasse mit HttpListener dem-Konstruktor, Prefixes und verwenden Sie die-Eigenschaft, um Zugriff auf die Auflistung zu erhalten, die die Zeichen folgen enthält, die angeben, welche Uniform Resource Identifier (URI) Präfixe für das HttpListenersollte verarbeiten.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 HttpListener ausgelöst, wenn ein 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 HttpListenerder angeforderte URI von keinem behandelt wird, 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 HttpListener einem-Objekt verwaltet werden.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 HttpListenerExceptiongeneriert.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 Start , um mit dem lauschen von Clients zu beginnen.To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListenerbietet 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, GetContext das von der-Methode oder Ihren asynchronen EndGetContext Entsprechungen, den BeginGetContext -und-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, GetContext um die-Methode aufzurufen, 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 HttpListenerContext ein-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 Sie BeginGetContext 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 HttpListenerRequest Sie werden durch-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 HttpListenerContext.Response der-Eigenschaft zugegriffen, HttpListenerResponse und Sie werden durch-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 HttpWebRequest dem HttpWebResponse -Objekt und dem-Objekt, aber die letzteren Objekte können HttpListener nicht in Verbindung mit verwendet werden, 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 UserEigenschaften AuthenticationSchemes, 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 HttpListenermehrere Authentifizierungs Schemas für angeben, führt der Listener Clients in der folgenden Reihenfolge aus: NTLM Negotiate, 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.

Konstruktoren

HttpListener() HttpListener() HttpListener() HttpListener()

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

Eigenschaften

AuthenticationSchemes AuthenticationSchemes AuthenticationSchemes 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 AuthenticationSchemeSelectorDelegate AuthenticationSchemeSelectorDelegate 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 DefaultServiceNames DefaultServiceNames DefaultServiceNames

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

ExtendedProtectionPolicy ExtendedProtectionPolicy ExtendedProtectionPolicy 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 ExtendedProtectionSelectorDelegate ExtendedProtectionSelectorDelegate 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 IgnoreWriteExceptions IgnoreWriteExceptions 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 IsListening IsListening IsListening

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

IsSupported IsSupported IsSupported 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 Prefixes Prefixes Prefixes

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

Realm Realm Realm 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 TimeoutManager TimeoutManager TimeoutManager

Der Timeouetmanager für diese HttpListener Instanz.The timeout manager for this HttpListener instance.

UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication UnsafeConnectionNtlmAuthentication 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() Abort() Abort() 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) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object) BeginGetContext(AsyncCallback, Object)

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

Close() Close() Close() Close()

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

EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) EndGetContext(IAsyncResult) EndGetContext(IAsyncResult)

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

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
GetContext() GetContext() GetContext() 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() GetContextAsync() GetContextAsync() GetContextAsync()

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
Start() Start() Start() Start()

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

Stop() Stop() Stop() Stop()

Bewirkt, dass diese Instanz keine eingehenden Anforderungen mehr empfängt.Causes this instance to stop receiving incoming requests.

ToString() ToString() ToString() ToString()

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

(Inherited from Object)

Explizite Schnittstellenimplementierungen

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

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

Gilt für:

Siehe auch