HttpListener Klas

Definitie

Biedt een eenvoudige, programmatisch beheerde HTTP-protocollistener. Deze klasse kan niet worden overgenomen.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Overname
HttpListener
Implementeringen

Voorbeelden

// 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

Opmerkingen

Met behulp van de HttpListener klasse kunt u een eenvoudige HTTP-protocollistener maken die reageert op HTTP-aanvragen. De listener is actief voor de levensduur van het HttpListener object en wordt uitgevoerd in uw toepassing met de bijbehorende machtigingen.

Als u wilt gebruiken HttpListener, maakt u een nieuw exemplaar van de klasse met behulp van de HttpListener constructor en gebruikt u de Prefixes eigenschap om toegang te krijgen tot de verzameling met de tekenreeksen die opgeven welke URI-voorvoegsels (Uniform Resource Identifier) het HttpListener moet verwerken.

Een URI-voorvoegseltekenreeks bestaat uit een schema (http of https), een host, een optionele poort en een optioneel pad. Een voorbeeld van een volledige voorvoegselreeks is http://www.contoso.com:8080/customerData/. Voorvoegsels moeten eindigen in een slash ("/"). Het HttpListener object met het voorvoegsel dat het meest overeenkomt met een aangevraagde URI reageert op de aanvraag. Meerdere HttpListener objecten kunnen hetzelfde voorvoegsel niet toevoegen. Er wordt een Win32Exception uitzondering gegenereerd als er HttpListener een voorvoegsel wordt toegevoegd dat al in gebruik is.

Wanneer er een poort is opgegeven, kan het hostelement worden vervangen door '*' om aan te geven dat de HttpListener verzoeken naar die poort accepteert, mits de gevraagde URI niet overeenkomt met een ander voorvoegsel. Als u bijvoorbeeld alle verzoeken wilt ontvangen die naar poort 8080 worden verzonden wanneer de aangevraagde URI niet door een HttpListener wordt verwerkt, is het voorvoegsel http://*:8080/. Als u wilt aangeven dat de HttpListener alle verzoeken naar een poort accepteert, vervangt u het hostelement door het '+' teken. Bijvoorbeeld: https://+:8080. De tekens *en +kunnen aanwezig zijn in voorvoegsels die paden bevatten.

Wildcard-subdomeinen worden ondersteund in URI-voorvoegsels die gemanaged worden door een HttpListener object. Als u een subdomein met jokertekens wilt opgeven, gebruikt u het teken *als onderdeel van de hostnaam in een URI-voorvoegsel. Bijvoorbeeld http://*.foo.com/. Geef dit door als het argument aan de Add methode.

Warning

Jokertekenbindingen op het hoogste niveau (http://*:8080/ en http://+:8080) mogen niet worden gebruikt. Wildcard-bindingen op het hoogste niveau maakt uw app kwetsbaar voor beveiligingsproblemen. Dit geldt zowel voor sterke als zwakke jokertekens. Gebruik expliciete hostnamen in plaats van het gebruik van jokertekens. Subdomeinbinding met jokertekens (bijvoorbeeld *.mysub.com) heeft dit beveiligingsrisico niet als u het hele bovenliggende domein bepaalt (in tegenstelling tot *.com, wat kwetsbaar is). Zie rfc7230 section-5.4 voor meer informatie.

Als u wilt luisteren naar aanvragen van clients, voegt u de URI-voorvoegsels toe aan de verzameling en roept u de Start methode aan. HttpListener biedt zowel synchrone als asynchrone modellen voor het verwerken van clientaanvragen. Aanvragen en de bijbehorende antwoorden worden geopend met behulp van het HttpListenerContext object dat wordt geretourneerd door de GetContext methode of de asynchrone tegenhangers, de BeginGetContext en EndGetContext methoden.

Het synchrone model is geschikt als uw toepassing moet worden geblokkeerd tijdens het wachten op een clientaanvraag en als u slechts één aanvraag tegelijk wilt verwerken. Roep met behulp van het synchrone model de GetContext methode aan, die wacht tot een client een aanvraag verzendt. De methode retourneert een HttpListenerContext object aan u wanneer er een plaatsvindt voor verwerking.

In het complexere asynchrone model wordt uw toepassing niet geblokkeerd tijdens het wachten op aanvragen en wordt elke aanvraag verwerkt in een eigen uitvoeringsthread. Gebruik de BeginGetContext methode om een door de toepassing gedefinieerde methode op te geven die moet worden aangeroepen voor elke binnenkomende aanvraag. Roep binnen die methode de methode aan om de EndGetContext aanvraag te verkrijgen, te verwerken en erop te reageren.

In beide modellen worden binnenkomende aanvragen geopend met behulp van de HttpListenerContext.Request eigenschap en worden ze vertegenwoordigd door HttpListenerRequest objecten. Op dezelfde manier worden antwoorden geopend met behulp van de HttpListenerContext.Response eigenschap en worden ze vertegenwoordigd door HttpListenerResponse objecten. Deze objecten delen bepaalde functionaliteit met de HttpWebRequest en HttpWebResponse objecten, maar de laatste objecten kunnen niet worden gebruikt in combinatie met HttpListener omdat ze client, niet server, gedrag implementeren.

Een HttpListener kan cliëntauthenticatie vereisen. U kunt een bepaald schema opgeven dat moet worden gebruikt voor verificatie, of u kunt een gemachtigde opgeven die bepaalt welk schema moet worden gebruikt. U moet enige vorm van verificatie vereisen om informatie over de identiteit van de client te verkrijgen. Zie de User, AuthenticationSchemesen AuthenticationSchemeSelectorDelegate eigenschappen voor meer informatie.

Note

Als u een HttpListener met https maakt, moet u een servercertificaat voor die listener selecteren. Anders zullen aanvragen naar deze HttpListener mislukken door een onverwachte verbreking van de verbinding.

Note

U kunt servercertificaten en andere listeneropties configureren met behulp van Network Shell (netsh.exe). Zie Network Shell (Netsh) voor meer informatie. Het uitvoerbare bestand werd geleverd met Windows Server 2008 en Windows Vista.

Note

Als u meerdere verificatieschema's voor de HttpListenerlistener opgeeft, zal de listener de clients in de volgende volgorde uitdagen: Negotiate, NTLM, Digest en vervolgens Basic.

HTTP.sys

De HttpListener klasse is gebaseerd op HTTP.sysde kernelmoduslistener die al het HTTP-verkeer voor Windows verwerkt. HTTP.sys biedt verbindingsbeheer, bandbreedtebeperking en logboekregistratie van webservers. Gebruik het hulpprogrammaHttpCfg.exe om SSL-certificaten toe te voegen.

Vanaf .NET 11 biedt de Windows-implementatie HTTP.sys ondersteuning voor het inschakelen van HttpListener reactiebuffering op kernelniveau. Wanneer deze optie is ingeschakeld, worden antwoordgegevens gebufferd door HTTP.sys voordat ze naar de client worden verzonden, waardoor de doorvoer voor verbindingen met hoge latentie kan worden verbeterd. Dit kan als volgt worden ingeschakeld door de AppContext.SetSwitch methode aan te roepen:

AppContext.SetSwitch("System.Net.HttpListener.EnableKernelResponseBuffering", true);

Constructors

Name Description
HttpListener()

Initialiseert een nieuw exemplaar van de HttpListener klasse.

Eigenschappen

Name Description
AuthenticationSchemes

Hiermee haalt u het schema op dat wordt gebruikt voor het verifiëren van clients.

AuthenticationSchemeSelectorDelegate

Hiermee haalt u de gemachtigde op die wordt aangeroepen om het protocol te bepalen dat wordt gebruikt voor het verifiëren van clients.

DefaultServiceNames

Hiermee haalt u een standaardlijst met SPN's (Service Provider Names) op, zoals wordt bepaald door geregistreerde voorvoegsels.

ExtendedProtectionPolicy

Hiermee haalt u het ExtendedProtectionPolicy te gebruiken voor uitgebreide beveiliging voor een sessie op of stelt u deze in.

ExtendedProtectionSelectorDelegate

Hiermee haalt u de gemachtigde op die wordt aangeroepen om de ExtendedProtectionPolicy te gebruiken voor elke aanvraag te bepalen.

IgnoreWriteExceptions

Hiermee wordt een Boolean waarde opgehaald of ingesteld die aangeeft of uw toepassing uitzonderingen ontvangt die optreden wanneer een HttpListener antwoord naar de client wordt verzonden.

IsListening

Hiermee wordt een waarde opgehaald die aangeeft of HttpListener is gestart.

IsSupported

Hiermee wordt een waarde opgehaald die aangeeft of HttpListener deze kan worden gebruikt met het huidige besturingssysteem.

Prefixes

Hiermee haalt u de URI-voorvoegsels (Uniform Resource Identifier) op die door dit HttpListener object worden verwerkt.

Realm

Hiermee wordt de realm of resourcepartitie opgehaald of ingesteld die aan dit HttpListener object is gekoppeld.

TimeoutManager

De time-outmanager voor dit HttpListener exemplaar.

UnsafeConnectionNtlmAuthentication

Hiermee wordt een Boolean waarde opgehaald of ingesteld waarmee wordt bepaald of, wanneer NTLM wordt gebruikt, aanvullende aanvragen met dezelfde TCP-verbinding (Transmission Control Protocol) vereist zijn om te verifiëren.

Methoden

Name Description
Abort()

Hiermee wordt het HttpListener object onmiddellijk afgesloten en worden alle momenteel in de wachtrij geplaatste aanvragen verwijderd.

BeginGetContext(AsyncCallback, Object)

Begint asynchroon met het ophalen van een binnenkomende aanvraag.

Close()

Sluit de HttpListener.

EndGetContext(IAsyncResult)

Hiermee wordt een asynchrone bewerking voltooid om een binnenkomende clientaanvraag op te halen.

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetContext()

Wacht op een binnenkomende aanvraag en retourneert wanneer een aanvraag wordt ontvangen.

GetContextAsync()

Wacht op een binnenkomende aanvraag als asynchrone bewerking.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
Start()

Hiermee kan dit exemplaar binnenkomende aanvragen ontvangen.

Stop()

Zorgt ervoor dat dit exemplaar geen nieuwe binnenkomende aanvragen meer ontvangt en de verwerking van alle lopende aanvragen beëindigt.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Expliciete interface-implementaties

Name Description
IDisposable.Dispose()

De resources die door dit HttpListener object worden bewaard, worden vrijgegeven.

Van toepassing op

Zie ook