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

Das folgende Codebeispiel veranschaulicht die Verwendung einer 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 verwenden, erstellen Sie einen einfachen HTTP-Listener-Protokoll, der auf HTTP-Anforderungen reagiert.Using the HttpListener class, you can create a simple HTTP protocol listener that responds to HTTP requests. Der Listener aktiv ist, für die Lebensdauer des der HttpListener Objekt und führt innerhalb Ihrer Anwendung mit seinen Berechtigungen.The listener is active for the lifetime of the HttpListener object and runs within your application with its permissions.

Mit HttpListener, erstellen Sie eine neue Instanz der Klasse mit der HttpListener Konstruktor und die Verwendung der Prefixes Eigenschaft für den Zugriff auf die Auflistung, die die Zeichenfolgen enthält, die angeben, welche Uniform Resource Identifier (URI) das Präfix der HttpListenerverarbeitet werden 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 einen optionalen Pfad.A URI prefix string is composed of a scheme (http or https), a host, an optional port, and an optional path. Ist ein Beispiel für eine vollständige Präfixzeichenfolge 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 ("/"). Die HttpListener Objekt mit dem Präfix an, die am ehesten einen 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 das gleiche Präfix hinzufügen, ein Win32Exception Ausnahme wird ausgelöst, wenn eine HttpListener hinzufügt, verwenden Sie ein Präfix, das bereits vorhanden ist.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 ist, kann das Hostelement ersetzt werden, mit "*" gibt an, dass die HttpListener akzeptiert Anforderungen an den Port gesendet werden, wenn der angeforderte URI nicht mit einem anderen Präfix übereinstimmt.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. Beispielsweise erhalten Sie alle Anforderungen gesendet an Port 8080, wenn der angeforderte URI nicht von einem behandelt HttpListener, das Präfix ist 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/. Auf ähnliche Weise an, dass der HttpListener akzeptiert alle Anforderungen gesendet, um einen Port, ersetzen Sie den Hostelement mit dem 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 "*" und "+" Zeichen in der Präfixe, die Pfade enthalten vorhanden sein können.The "*" and "+" characters can be present in prefixes that include paths.

Ab .NET Core 2.0 oder .NET Framework 4.6 auf Windows 10, werden Platzhalter Unterdomänen in URI-Präfixe, die von verwaltet werden unterstützt eine HttpListener Objekt.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 Unterdomäne Platzhalter anzugeben, verwenden die "*"-Zeichen als Teil des Hostnamens in eine URI-Präfix.To specify a wildcard subdomain, use the "*" character as part of the hostname in a URI prefix. Z. B. http://*.foo.com/.For example, http://*.foo.com/. Übergeben als Argument für die Add Methode.Pass this as the argument to the Add method. Dies funktioniert ab .NET Core 2.0 oder .NET Framework 4.6 auf Windows 10; in früheren Versionen wurde dies generiert eine 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

Allgemeine platzhalterbindungen (http://*: 8080 / und http://+:8080) sollten 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.

Zum Lauschen auf Anforderungen von Clients beginnen, fügen Sie die URI-Präfixe, auf die Sammlung und den Aufruf der Start Methode.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 Clientanforderungen an.HttpListener offers both synchronous and asynchronous models for processing client requests. Anforderungen und die zugehörigen Antworten erfolgt mit der HttpListenerContext zurückgegebenes Objekt der GetContext -Methode oder die asynchrone Gegenstücke, die BeginGetContext und EndGetContext Methoden.Requests 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 eignet sich, wenn Ihre Anwendung beim Warten auf einer Clientanforderungs blockiert werden soll, und wenn Sie nur eine Anforderung gleichzeitig 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. Rufen Sie das synchrone Modell mit den GetContext -Methode, die für einen Client zum Senden einer Anforderung wartet.Using the synchronous model, call the GetContext method, which waits for a client to send a request. Die Methode gibt ein HttpListenerContext -Objekt zur Verarbeitung, wenn bei mindestens einem tritt auf.The method returns an HttpListenerContext object to you for processing when one occurs.

Im komplexere asynchrone Modell wird Ihre Anwendung nicht blockiert, während in einem eigenen Ausführungsthread warten auf Anfragen und jede Anforderung verarbeitet wird.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 der BeginGetContext Methode an eine Anwendung definierte Methode, die für jede eingehende Anforderung aufgerufen werden.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, um die Anforderung abrufen, verarbeiten und zu reagieren.Within that method, call the EndGetContext method to obtain the request, process it, and respond.

Bei beiden Modellen eingehende Anforderungen erfolgt mit der HttpListenerContext.Request -Eigenschaft und sind durch dargestellt HttpListenerRequest Objekte.In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. Auf ähnliche Weise Antworten erfolgt mit der HttpListenerContext.Response -Eigenschaft und sind durch dargestellt HttpListenerResponse Objekte.Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. Diese Objekte nutzen einige Funktionen, mit der HttpWebRequest und HttpWebResponse Objekte, aber die zweite Objekte können nicht in Verbindung mit verwendet werden HttpListener , da sie Clients, nicht Serververhalten 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 können Clientauthentifizierung erforderlich.An HttpListener can require client authentication. Sie können entweder angeben, ein bestimmtes Schema für die Authentifizierung verwenden, oder können Sie angeben, ein Delegat, der bestimmt, das Schema verwenden.You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. Sie müssen eine Form der Authentifizierung zum Abrufen von Informationen über die Identität des Clients erfordern.You must require some form of authentication to obtain information about the client's identity. Weitere Informationen finden Sie unter den User, AuthenticationSchemes, und AuthenticationSchemeSelectorDelegate Eigenschaften.For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

Hinweis

Bei der Erstellung einer HttpListener mithilfe von Https, müssen Sie ein Serverzertifikat für diesen Listener auswählen.If you create an HttpListener using https, you must select a Server Certificate for that listener. Andernfalls ein HttpWebRequest dieses HttpListener schlägt mit einem unerwarteten Schließen der Verbindung.Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.

Hinweis

Sie können die Serverzertifikate und andere Listeneroptionen konfigurieren, mithilfe von Network Shell (netsh.exe).You can configure Server Certificates and other listener options by using Network Shell (netsh.exe). Finden Sie unter Netzwerkshell (Netsh) Weitere Details.See Network Shell (Netsh) for more details. Die ausführbare Datei wurde im Lieferumfang von Windows Server 2008 und Windows Vista.The executable began shipping with Windows Server 2008 and Windows Vista.

Hinweis

Wenn Sie angeben, dass mehrere Authentifizierungsschemen für die HttpListener, der Listener werden Clients in der folgenden Reihenfolge Herausforderung: Negotiate, NTLM, Digest, und klicken Sie 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 (Service Provider Names, 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-Präfixe (Uniform Resource Identifier) 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 Timeout-Manager 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 einen 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