HttpListener Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller en enkel, programmatiskt kontrollerad HTTP-protokolllyssnare. Det går inte att ärva den här klassen.
public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
- Arv
-
HttpListener
- Implementeringar
Exempel
// 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
Kommentarer
Med hjälp av HttpListener klassen kan du skapa en enkel HTTP-protokolllyssnare som svarar på HTTP-begäranden. Lyssnaren är aktiv under objektets HttpListener livslängd och körs i ditt program med dess behörigheter.
Om du vill använda HttpListenerskapar du en ny instans av klassen med konstruktorn HttpListener och använder Prefixes egenskapen för att få åtkomst till samlingen som innehåller strängarna som anger vilka URI-prefix (Uniform Resource Identifier) som ska bearbetas HttpListener .
En URI-prefixsträng består av ett schema (http eller https), en värd, en valfri port och en valfri sökväg. Ett exempel på en fullständig prefixsträng är http://www.contoso.com:8080/customerData/. Prefixer måste avslutas med ett snedstreck ("/"). Objektet HttpListener med prefixet som bäst matchar en begärd URI svarar på begäran. Flera HttpListener objekt kan inte lägga till samma prefix. Ett Win32Exception undantag utlöses om ett HttpListener lägger till ett prefix som redan används.
När en port har angetts kan värdelementet ersättas med "*" för att indikera att HttpListener accepterar begäranden som skickas till porten, om den begärda URI:n inte matchar något annat prefix. Om du till exempel vill ta emot alla begäranden som skickas till port 8080 när den begärda URI:n inte hanteras av någon HttpListener, är prefixet http://*:8080/. På samma sätt ersätter du värdelementet som värd med symbolen "+" om du vill ange att begäranden som HttpListener skickas till en port ska accepteras. Till exempel https://+:8080. Tecknen "*" och "+" kan finnas i prefix som innehåller sökvägar.
Wildcard-underdomäner stöds i URI-prefix som hanteras av ett HttpListener objekt. Om du vill ange en underdomän med jokertecken använder du tecknet "*" som en del av värdnamnet i ett URI-prefix. Till exempel http://*.foo.com/. Skicka detta som argument till Add metoden.
Varning
Jokerteckenbindningar på toppnivå (http://*:8080/ och http://+:8080) bör inte användas. Jokerteckenbindningar på toppnivå kan öppna din app för säkerhetsrisker. Detta gäller för både starka och svaga jokertecken. Använd explicita värdnamn i stället för jokertecken. Jokerteckenbindning för underdomäner (till exempel *.mysub.com) har inte den här säkerhetsrisken om du kontrollerar hela den överordnade domänen (till skillnad från *.com, som är sårbar). Mer information finns i rfc7230 section-5.4 .
Om du vill börja lyssna efter begäranden från klienter lägger du till URI-prefixen i samlingen och anropar Start metoden. HttpListener erbjuder både synkrona och asynkrona modeller för bearbetning av klientbegäranden. Begäranden och deras associerade svar nås med hjälp av objektet HttpListenerContext som returneras av GetContext metoden eller dess asynkrona motsvarigheter, BeginGetContext metoderna och EndGetContext .
Den synkrona modellen är lämplig om programmet ska blockeras i väntan på en klientbegäran och om du bara vill bearbeta en begäran i taget. Med hjälp av den synkrona modellen anropar du GetContext metoden som väntar på att en klient ska skicka en begäran. Metoden returnerar ett HttpListenerContext objekt till dig för bearbetning när ett inträffar.
I den mer komplexa asynkrona modellen blockeras inte programmet i väntan på begäranden och varje begäran bearbetas i sin egen körningstråd. BeginGetContext Använd metoden för att ange en programdefinierad metod som ska anropas för varje inkommande begäran. I den metoden anropar EndGetContext du metoden för att hämta begäran, bearbeta den och svara.
I båda modellerna nås inkommande begäranden med hjälp av HttpListenerContext.Request egenskapen och representeras av HttpListenerRequest objekt. På samma sätt används svar med hjälp av HttpListenerContext.Response egenskapen och representeras av HttpListenerResponse objekt. Dessa objekt delar vissa funktioner med objekten HttpWebRequest och HttpWebResponse , men de senare objekten kan inte användas tillsammans med HttpListener eftersom de implementerar klientbeteenden, inte serverbeteenden.
En HttpListener kan kräva klientautentisering. Du kan antingen ange ett visst schema som ska användas för autentisering, eller så kan du ange ett ombud som avgör vilket schema som ska användas. Du måste kräva någon form av autentisering för att få information om klientens identitet. Mer information finns i Useregenskaperna , AuthenticationSchemesoch AuthenticationSchemeSelectorDelegate .
Note
Om du skapar en HttpListener med https måste du välja ett servercertifikat för lyssnaren. Annars kommer begäranden till detta HttpListener att misslyckas med en oväntad stängning av förbindelsen.
Note
Du kan konfigurera servercertifikat och andra lyssnaralternativ med hjälp av Network Shell (netsh.exe). Mer information finns i Network Shell (Netsh ). Den körbara programfilen började levereras med Windows Server 2008 och Windows Vista.
Note
Om du anger flera autentiseringsscheman för HttpListenerkommer lyssnaren att utmana klienterna i följande ordning: Negotiate, NTLM, Digestoch sedan Basic.
HTTP.sys
Klassen HttpListener bygger på HTTP.sys, vilket är lyssnaren i kernelläge som hanterar all HTTP-trafik för Windows.
HTTP.sys tillhandahåller anslutningshantering, bandbreddsbegränsning och webbserverloggning.
Använd verktygetHttpCfg.exe för att lägga till SSL-certifikat.
Från och med .NET 11 stöder Windows-implementeringen HTTP.sys aktivering av HttpListener svarsbuffring på kernelnivå. När det är aktiverat buffrar svarsdata av HTTP.sys innan de skickas till klienten, vilket kan förbättra dataflödet för anslutningar med hög svarstid. Detta kan aktiveras genom att anropa metoden på AppContext.SetSwitch följande sätt:
AppContext.SetSwitch("System.Net.HttpListener.EnableKernelResponseBuffering", true);
Konstruktorer
| Name | Description |
|---|---|
| HttpListener() |
Initierar en ny instans av HttpListener klassen. |
Egenskaper
| Name | Description |
|---|---|
| AuthenticationSchemes |
Hämtar eller anger det schema som används för att autentisera klienter. |
| AuthenticationSchemeSelectorDelegate |
Hämtar eller anger det ombud som anropas för att fastställa vilket protokoll som används för att autentisera klienter. |
| DefaultServiceNames |
Hämtar en standardlista över tjänstleverantörsnamn (SPN) som bestäms av registrerade prefix. |
| ExtendedProtectionPolicy |
Hämtar eller ställer in som ExtendedProtectionPolicy ska användas för utökat skydd för en session. |
| ExtendedProtectionSelectorDelegate |
Hämtar eller ställer in ombudet som anropas för att fastställa vilken ExtendedProtectionPolicy som ska användas för varje begäran. |
| IgnoreWriteExceptions |
Hämtar eller anger ett Boolean värde som anger om programmet tar emot undantag som inträffar när ett HttpListener skickar svaret till klienten. |
| IsListening |
Hämtar ett värde som anger om HttpListener har startats. |
| IsSupported |
Hämtar ett värde som anger om HttpListener kan användas med det aktuella operativsystemet. |
| Prefixes |
Hämtar de URI-prefix (Uniform Resource Identifier) som hanteras av det här HttpListener objektet. |
| Realm |
Hämtar eller anger sfären, eller resurspartitionen, som är associerad med det här HttpListener objektet. |
| TimeoutManager |
Timeout-chefen för den här HttpListener instansen. |
| UnsafeConnectionNtlmAuthentication |
Hämtar eller anger ett Boolean värde som styr om ytterligare begäranden som använder samma TCP-anslutning (Transmission Control Protocol) måste autentiseras när NTLM används. |
Metoder
| Name | Description |
|---|---|
| Abort() |
Stänger av HttpListener objektet omedelbart och tar bort alla för närvarande köade begäranden. |
| BeginGetContext(AsyncCallback, Object) |
Börjar asynkront hämta en inkommande begäran. |
| Close() |
Stänger av HttpListener. |
| EndGetContext(IAsyncResult) |
Slutför en asynkron åtgärd för att hämta en inkommande klientbegäran. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetContext() |
Väntar på en inkommande begäran och returnerar när en tas emot. |
| GetContextAsync() |
Väntar på en inkommande begäran som en asynkron åtgärd. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| Start() |
Tillåter att den här instansen tar emot inkommande begäranden. |
| Stop() |
Gör att den här instansen slutar ta emot nya inkommande begäranden och avslutar bearbetningen av alla pågående begäranden. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| IDisposable.Dispose() |
Frigör de resurser som innehas av det här HttpListener objektet. |