HttpListener Klass

Definition

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.

Gäller för

Se även