System.Net.HttpListener-Klasse
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
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.
Erstellen Sie zum Verwenden HttpListenereine neue Instanz der Klasse mithilfe des HttpListener Konstruktors, und verwenden Sie die Eigenschaft, um Zugriff auf die Prefixes Auflistung zu erhalten, die die Zeichenfolgen enthält, die angeben, welche URI (Uniform Resource Identifier) Präfixe für den HttpListener Prozess verwendet werden soll.
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 ehesten mit einem angeforderten URI übereinstimmt, antwortet auf die Anforderung. Mehrere HttpListener Objekte können dasselbe Präfix nicht hinzufügen. Eine Win32Exception Ausnahme wird ausgelöst, wenn ein HttpListener bereits verwendetes Präfix hinzugefügt wird.
Wenn ein Port angegeben wird, kann das Hostelement durch "*" ersetzt werden, um anzugeben, dass die HttpListener an den Port gesendeten Anforderungen akzeptiert werden, 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 nicht von einem HttpListenerverarbeitet wird, lautet das Präfix "http://*:8080/". Um anzugeben, dass alle HttpListener an einen Port gesendeten Anforderungen akzeptiert werden, ersetzen Sie das Hostelement durch das Zeichen "+". Beispielsweise https://+:8080. Die Zeichen "*" und "+" können in Präfixen vorhanden sein, die Pfade enthalten.
Wild Karte-Unterdo Standard werden in URI-Präfixen unterstützt, die von einem HttpListener Objekt verwaltet werden. Verwenden Sie zum Angeben eines Wild Karte-Unterdo Standard das Zeichen "*" als Teil des Hostnamens in einem URI-Präfix. Beispiel: http://*.foo.com/. Übergeben Sie dies als Argument an die Add Methode.
Warnung
Wild Karte Bindungen 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 der Überwachung von Anforderungen von Clients zu beginnen, fügen Sie der Auflistung die URI-Präfixe hinzu, und rufen Sie die Start Methode auf. 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 GetContext Methode oder den asynchronen Gegenstücken, den BeginGetContext Methoden und EndGetContext Methoden zurückgegeben wird.
Das synchrone Modell ist geeignet, wenn Ihre Anwendung blockiert werden soll, während Sie auf eine Clientanforderung warten und nur jeweils eine Anforderung 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 für die Verarbeitung zurück, wenn ein Objekt 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 in dieser Methode die EndGetContext Methode auf, um die Anforderung abzurufen, sie zu verarbeiten und zu antworten.
In beiden Modellen wird mithilfe der HttpListenerContext.Request Eigenschaft auf eingehende Anforderungen zugegriffen und durch HttpListenerRequest Objekte dargestellt. Ebenso wird auf Antworten mithilfe der HttpListenerContext.Response Eigenschaft zugegriffen und durch HttpListenerResponse Objekte dargestellt. Diese Objekte teilen einige Funktionen mit den HttpWebRequest Und-Objekten HttpWebResponse , die letzteren Objekte können jedoch nicht in Verbindung mit HttpListener dem Code verwendet werden, da sie client- und nicht serverseitige Verhaltensweisen implementieren.
Für eine HttpListener Clientauthentifizierung kann eine Clientauthentifizierung erforderlich sein. 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. Sie müssen eine Form der Authentifizierung benötigen, um Informationen zur Identität des Clients abzurufen. 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 die Anforderung mit HttpListener einem unerwarteten Schließen der Verbindung fehl.
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 begann mit dem Versand mit Windows Server 2008 und Windows Vista.
Hinweis
Wenn Sie mehrere Authentifizierungsschemas für die HttpListenerDatei angeben, fordert der Listener Clients in der folgenden Reihenfolge heraus: Negotiate
, , NTLM
, Digest
und dann Basic
.
HTTP.sys
Die HttpListener Klasse basiert auf HTTP.sys
dem Kernelmoduslistener, der den gesamten HTTP-Datenverkehr für Windows verarbeitet.
HTTP.sys
bietet Verbindungsverwaltung, Bandbreiteneinschränkung und Webserverprotokollierung.
Verwenden Sie das tool HttpCfg.exe , um SSL-Zertifikate hinzuzufügen.