HttpListener Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
// 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 HttpListener zu verwenden, erstellen Sie eine neue Instanz der Klasse mit dem HttpListener Konstruktor. Verwenden Sie die Prefixes Eigenschaft, um Zugriff auf die Sammlung zu erhalten, welche die Zeichenfolgen enthält, die festlegen, welche URIPräfixe (Uniform Resource Identifier) vom 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 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.
Falls ein Port angegeben ist, kann das Hostelement durch "*" ersetzt werden, um anzugeben, dass HttpListener die Anforderungen akzeptiert, die an den Port gesendet 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 das HttpListener alle Anforderungen akzeptiert, die an einen Port gesendet werden, ersetzen Sie das Hostelement durch das Zeichen "+". Beispiel: https://+:8080 Die Zeichen "*" und "+" können in Präfixen vorhanden sein, die Pfade enthalten.
Wildcard-Unterdomänen werden 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. Beispiel: http://*.foo.com/. Übergeben Sie dies als Argument an die Add Methode.
Warning
Wildcardbindungen 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 Section-5.4 .
Um mit dem Empfangen von Anforderungen von Clients zu beginnen, fügen Sie die URI-Präfixe der Auflistung hinzu und rufen Sie die Methode Start auf. HttpListener bietet synchrone und asynchrone Modelle für die Verarbeitung von Clientanforderungen. Anforderungen und deren zugehörige Antworten werden über das HttpListenerContext-Objekt abgerufen, das von der GetContext-Methode oder ihren asynchronen Gegenstücken, den BeginGetContext- 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 zur Verarbeitung zurück, wenn eines 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 HttpWebResponse Objekten, die letzteren Objekte können jedoch nicht zusammen mit HttpListener verwendet werden, da sie clientseitige und nicht serverseitige Verhaltensweisen implementieren.
Eine HttpListener kann eine Clientauthentifizierung erfordern. 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".
Note
Wenn Sie ein HttpListener https-Objekt erstellen, müssen Sie ein Serverzertifikat für diesen Listener auswählen. Andernfalls werden Anfragen an dieses HttpListener mit einem unerwarteten Schließen der Verbindung fehlschlagen.
Note
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 wurde zusammen mit Windows Server 2008 und Windows Vista ausgeliefert.
Note
Wenn Sie mehrere Authentifizierungsschemas für die HttpListenerDatei angeben, fordert der Listener Clients in der folgenden Reihenfolge heraus: Negotiate, , NTLM, Digestund dann Basic.
HTTP.sys
Die HttpListener Klasse basiert auf HTTP.sysdem Kernelmoduslistener, der den gesamten HTTP-Datenverkehr für Windows verarbeitet.
HTTP.sys bietet Verbindungsverwaltung, Bandbreiteneinschränkung und Webserverprotokollierung.
Verwenden Sie das toolHttpCfg.exe , um SSL-Zertifikate hinzuzufügen.
Ab .NET 11 unterstützt die Windows-Implementierung HTTP.sys das Aktivieren von HttpListener Antwortpuffern auf Kernelebene. Wenn diese Option aktiviert ist, werden die Antwortdaten von HTTP.sys gepuffert, bevor sie an den Client gesendet werden, wodurch der Durchsatz für Verbindungen mit hoher Latenz verbessert werden kann. Dies kann durch Aufrufen der AppContext.SetSwitch Methode wie folgt aktiviert werden:
AppContext.SetSwitch("System.Net.HttpListener.EnableKernelResponseBuffering", true);
Konstruktoren
| Name | Beschreibung |
|---|---|
| HttpListener() |
Initialisiert eine neue Instanz der HttpListener-Klasse. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| AuthenticationSchemes |
Ruft ab oder legt das Schema fest, das zum Authentifizieren von Clients verwendet wird. |
| AuthenticationSchemeSelectorDelegate |
Ruft den aufgerufenen Delegaten ab, um das Protokoll zu bestimmen, das für die Authentifizierung von Clients verwendet wird, oder legt diesen fest. |
| DefaultServiceNames |
Ruft eine Standardliste von Dienstanbieternamen (SPNs) ab, die durch registrierte Präfixe bestimmt wird. |
| ExtendedProtectionPolicy |
Ruft den erweiterten Schutz für eine Sitzung ab oder legt sie ExtendedProtectionPolicy fest. |
| ExtendedProtectionSelectorDelegate |
Ruft den aufgerufenen Delegaten ab, um die ExtendedProtectionPolicy für jede Anforderung zu verwendende Stellvertretung zu bestimmen, oder legt diesen fest. |
| IgnoreWriteExceptions |
Dient zum Abrufen oder Festlegen eines Boolean Werts, der angibt, ob Ihre Anwendung Ausnahmen empfängt, die auftreten, wenn eine HttpListener Antwort an den Client gesendet wird. |
| IsListening |
Ruft einen Wert ab, der angibt, ob HttpListener gestartet wurde. |
| IsSupported |
Ruft einen Wert ab, der angibt, ob HttpListener mit dem aktuellen Betriebssystem verwendet werden kann. |
| Prefixes |
Ruft die URI-Präfixe (Uniform Resource Identifier) ab, die von diesem HttpListener Objekt behandelt werden. |
| Realm |
Ruft den Bereich oder die Ressourcenpartition ab, die diesem HttpListener Objekt zugeordnet ist, oder legt diesen fest. |
| TimeoutManager |
Der Timeout-Manager für diese HttpListener Instanz. |
| UnsafeConnectionNtlmAuthentication |
Dient zum Abrufen oder Festlegen eines Boolean Werts, der steuert, ob bei Verwendung von NTLM zusätzliche Anforderungen mit derselben TCP-Verbindung (Transmission Control Protocol) für die Authentifizierung erforderlich sind. |
Methoden
| Name | Beschreibung |
|---|---|
| Abort() |
Beendet das HttpListener Objekt sofort, wobei alle aktuell in die Warteschlange gestellten Anforderungen verworfen werden. |
| BeginGetContext(AsyncCallback, Object) |
Beginnt asynchrones Abrufen einer eingehenden Anforderung. |
| Close() |
Beendet das HttpListener. |
| EndGetContext(IAsyncResult) |
Führt einen asynchronen Vorgang aus, um eine eingehende Clientanforderung abzurufen. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetContext() |
Wartet auf eine eingehende Anforderung und gibt zurück, wenn eine empfangen wird. |
| GetContextAsync() |
Wartet auf eine eingehende Anforderung als asynchroner Vorgang. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| Start() |
Ermöglicht dieser Instanz, eingehende Anforderungen zu empfangen. |
| Stop() |
Bewirkt, dass diese Instanz den Empfang neuer eingehender Anforderungen beendet und die Verarbeitung aller laufenden Anforderungen beendet. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IDisposable.Dispose() |
Gibt die Ressourcen frei, die von diesem HttpListener Objekt gehalten werden. |