HttpListener Třída

Definice

Poskytuje jednoduchý, programově řízený naslouchací proces protokolu HTTP.Provides a simple, programmatically controlled HTTP protocol listener. Tuto třídu nelze zdědit.This class cannot be inherited.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
Dědičnost
HttpListener
Implementuje

Příklady

Následující příklad kódu ukazuje použití HttpListener .The following code example demonstrates using a HttpListener.

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

Poznámky

Pomocí HttpListener třídy můžete vytvořit jednoduchý naslouchací proces protokolu HTTP, který reaguje na požadavky HTTP.Using the HttpListener class, you can create a simple HTTP protocol listener that responds to HTTP requests. Naslouchací proces je aktivní po dobu života HttpListener objektu a běží v rámci aplikace s jeho oprávněními.The listener is active for the lifetime of the HttpListener object and runs within your application with its permissions.

Chcete-li použít HttpListener , vytvořte novou instanci třídy pomocí HttpListener konstruktoru a použijte Prefixes vlastnost k získání přístupu do kolekce obsahující řetězce, které určují, který identifikátor URI (Uniform Resource Identifier) HttpListener má být zpracován.To use HttpListener, create a new instance of the class using the HttpListener constructor and use the Prefixes property to gain access to the collection that holds the strings that specify which Uniform Resource Identifier (URI) prefixes the HttpListener should process.

Řetězec předpony identifikátoru URI se skládá ze schématu (http nebo https), hostitele, volitelného portu a volitelné cesty.A URI prefix string is composed of a scheme (http or https), a host, an optional port, and an optional path. Příkladem kompletního řetězce předpony je http://www.contoso.com:8080/customerData/ .An example of a complete prefix string is http://www.contoso.com:8080/customerData/. Předpony musí končit lomítkem ("/").Prefixes must end in a forward slash ("/"). HttpListenerObjekt s předponou, která nejlépe odpovídá požadovanému identifikátoru URI, reaguje na požadavek.The HttpListener object with the prefix that most closely matches a requested URI responds to the request. Více HttpListener objektů nemůže přidat stejnou předponu. Win32Exception Pokud HttpListener přidá předponu, která je již používána, je vyvolána výjimka.Multiple HttpListener objects cannot add the same prefix; a Win32Exception exception is thrown if a HttpListener adds a prefix that is already in use.

Pokud je určen port, může být element hostitele nahrazen znakem " * ", který označuje, že HttpListener požadavky přijetí na port jsou odesílány, pokud požadovaný identifikátor URI neodpovídá žádné jiné předponě.When a port is specified, the host element can be replaced with "*" to indicate that the HttpListener accepts requests sent to the port if the requested URI does not match any other prefix. Například pro příjem všech požadavků odeslaných na port 8080, pokud požadovaný identifikátor URI není zpracován jakýmkoli, je HttpListener předpona http:// * : 8080/.For example, to receive all requests sent to port 8080 when the requested URI is not handled by any HttpListener, the prefix is http://*:8080/. Podobně pokud chcete určit, že HttpListener přijímá všechny požadavky odeslané na port, nahraďte element hostitele znakem "+".Similarly, to specify that the HttpListener accepts all requests sent to a port, replace the host element with the "+" character. Příklad: https://+:8080.For example, https://+:8080. Znaky " * " a "+" mohou být uvedeny v předponách, které obsahují cesty.The "*" and "+" characters can be present in prefixes that include paths.

Počínaje rozhraním .NET Core 2,0 nebo .NET Framework 4,6 ve Windows 10 jsou v předponách identifikátoru URI, které jsou spravovány objektem, podporovány subdomény se zástupnými znaky HttpListener .Starting with .NET Core 2.0 or .NET Framework 4.6 on Windows 10, wildcard subdomains are supported in URI prefixes that are managed by an HttpListener object. Chcete-li zadat subdoménou se zástupnými znaky, použijte * jako součást názvu hostitele v předponě identifikátoru URI znak "".To specify a wildcard subdomain, use the "*" character as part of the hostname in a URI prefix. Například http:// * . foo.com/.For example, http://*.foo.com/. Předejte to jako argument Add metodě.Pass this as the argument to the Add method. To funguje pro .NET Core 2,0 nebo .NET Framework 4,6 ve Windows 10; v dřívějších verzích to generuje HttpListenerException .This works as of .NET Core 2.0 or .NET Framework 4.6 on Windows 10; in earlier versions, this generates an HttpListenerException.

Upozornění

Zástupné vazby na nejvyšší úrovni (http:// * : 8080/ a http://+:8080 ) by se neměly používat.Top-level wildcard bindings (http://*:8080/ and http://+:8080) should not be used. Vazby zástupných znaků nejvyšší úrovně můžou aplikaci otevřít pro slabá místa zabezpečení.Top-level wildcard bindings can open up your app to security vulnerabilities. To platí pro silné i slabé zástupné znaky.This applies to both strong and weak wildcards. Místo zástupných znaků použijte explicitní názvy hostitelů.Use explicit host names rather than wildcards. Vazba zástupných znaků subdomény (například *.mysub.com ) nemá toto bezpečnostní riziko, pokud ovládáte celou nadřazenou doménu (na rozdíl od *.com , která je zranitelná).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Další informace najdete v části rfc7230 část-5,4 .See rfc7230 section-5.4 for more information.

Chcete-li začít naslouchat požadavkům od klientů, přidejte předpony identifikátoru URI do kolekce a zavolejte Start metodu.To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListener nabízí synchronní i asynchronní modely pro zpracování požadavků klientů.HttpListener offers both synchronous and asynchronous models for processing client requests. Žádosti a jejich přidružené odpovědi jsou k dispozici pomocí HttpListenerContext objektu vráceného GetContext metodou nebo jejími asynchronními protějšky BeginGetContext , EndGetContext metodami a.Requests and their associated responses are accessed using the HttpListenerContext object returned by the GetContext method or its asynchronous counterparts, the BeginGetContext and EndGetContext methods.

Synchronní model je vhodný v případě, že by měla aplikace blokovat při čekání na požadavek klienta a pokud chcete zpracovat pouze jeden požadavek současně.The synchronous model is appropriate if your application should block while waiting for a client request and if you want to process only one request at a time. Pomocí synchronního modelu zavolejte GetContext metodu, která počká, až klient pošle požadavek.Using the synchronous model, call the GetContext method, which waits for a client to send a request. Metoda vrátí objekt pro HttpListenerContext zpracování, když dojde k jednomu.The method returns an HttpListenerContext object to you for processing when one occurs.

V složitějším asynchronním modelu vaše aplikace neblokuje při čekání na žádosti a každý požadavek je zpracován ve vlastním vlákně pro spuštění.In the more complex asynchronous model, your application does not block while waiting for requests and each request is processed in its own execution thread. Použijte BeginGetContext metodu k určení metody definované aplikací, která má být volána pro každý příchozí požadavek.Use the BeginGetContext method to specify an application-defined method to be called for each incoming request. V rámci této metody zavolejte EndGetContext metodu pro získání žádosti, zpracování a odpověď.Within that method, call the EndGetContext method to obtain the request, process it, and respond.

V obou modelech jsou příchozí žádosti k dispozici pomocí HttpListenerContext.Request vlastnosti a jsou reprezentovány HttpListenerRequest objekty.In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. Podobně jsou odpovědi k dispozici pomocí HttpListenerContext.Response vlastnosti a jsou reprezentovány HttpListenerResponse objekty.Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. Tyto objekty sdílejí některé funkce s HttpWebRequest objekty a HttpWebResponse , ale ostatní objekty nelze použít společně s, HttpListener protože implementují klienta, nikoli server, chování.These objects share some functionality with the HttpWebRequest and HttpWebResponse objects, but the latter objects cannot be used in conjunction with HttpListener because they implement client, not server, behaviors.

HttpListenerMůže vyžadovat ověření klienta.An HttpListener can require client authentication. Můžete buď zadat konkrétní schéma, které se má použít pro ověřování, nebo můžete zadat delegáta, který určí schéma, které se má použít.You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. Chcete-li získat informace o identitě klienta, musíte vyžadovat určitou formu ověřování.You must require some form of authentication to obtain information about the client's identity. Další informace naleznete v tématu User vlastnosti, AuthenticationSchemes a AuthenticationSchemeSelectorDelegate .For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

Poznámka

Pokud vytvoříte HttpListener pomocí protokolu HTTPS, musíte vybrat certifikát serveru pro tento naslouchací proces.If you create an HttpListener using https, you must select a Server Certificate for that listener. V opačném případě se HttpWebRequest dotaz na tuto chybu nezdaří a dojde k HttpListener neočekávanému ukončení připojení.Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.

Poznámka

Pomocí síťového prostředí (netsh.exe) můžete nakonfigurovat certifikáty serveru a další možnosti naslouchacího procesu.You can configure Server Certificates and other listener options by using Network Shell (netsh.exe). Další podrobnosti najdete v části Network Shell (Netsh) .See Network Shell (Netsh) for more details. Spustitelný soubor začal dodávat s Windows Serverem 2008 a Windows Vista.The executable began shipping with Windows Server 2008 and Windows Vista.

Poznámka

Pokud zadáte více schémat ověřování pro HttpListener , naslouchací proces bude klientům vyvolávat výzvy v následujícím pořadí: Negotiate , NTLM , Digest a poté Basic .If you specify multiple authentication schemes for the HttpListener, the listener will challenge clients in the following order: Negotiate, NTLM, Digest, and then Basic.

HTTP.sysHTTP.sys

HttpListenerTřída je postavená na HTTP.sys , což je naslouchací proces režimu jádra, který zpracovává veškerý provoz protokolu HTTP pro systém Windows.The HttpListener class is built on top of HTTP.sys, which is the kernel mode listener that handles all HTTP traffic for Windows. HTTP.sys poskytuje správu připojení, omezení šířky pásma a protokolování webového serveru.HTTP.sys provides connection management, bandwidth throttling, and web server logging. K přidání certifikátů SSL použijte nástroj HttpCfg.exe .Use the HttpCfg.exe tool to add SSL certificates.

Konstruktory

HttpListener()

Inicializuje novou instanci HttpListener třídy.Initializes a new instance of the HttpListener class.

Vlastnosti

AuthenticationSchemes

Získá nebo nastaví schéma používané k ověřování klientů.Gets or sets the scheme used to authenticate clients.

AuthenticationSchemeSelectorDelegate

Získá nebo nastaví delegáta s názvem k určení protokolu používaného k ověřování klientů.Gets or sets the delegate called to determine the protocol used to authenticate clients.

DefaultServiceNames

Získá výchozí seznam názvů poskytovatelů služeb (SPN) určených registrovanými předponami.Gets a default list of Service Provider Names (SPNs) as determined by registered prefixes.

ExtendedProtectionPolicy

Získá nebo nastaví hodnotu, ExtendedProtectionPolicy která se má použít pro rozšířenou ochranu relace.Gets or sets the ExtendedProtectionPolicy to use for extended protection for a session.

ExtendedProtectionSelectorDelegate

Získá nebo nastaví delegáta, který určuje, že se ExtendedProtectionPolicy má použít pro každý požadavek.Gets or sets the delegate called to determine the ExtendedProtectionPolicy to use for each request.

IgnoreWriteExceptions

Získává nebo nastavuje Boolean hodnotu, která určuje, jestli vaše aplikace přijímá výjimky, ke kterým dojde, když HttpListener pošle odpověď klientovi.Gets or sets a Boolean value that specifies whether your application receives exceptions that occur when an HttpListener sends the response to the client.

IsListening

Získá hodnotu, která označuje, zda byla HttpListener spuštěna.Gets a value that indicates whether HttpListener has been started.

IsSupported

Načte hodnotu, která označuje, jestli se HttpListener dá použít s aktuálním operačním systémem.Gets a value that indicates whether HttpListener can be used with the current operating system.

Prefixes

Získá předpony identifikátoru URI (Uniform Resource Identifier) zpracovávané tímto HttpListener objektem.Gets the Uniform Resource Identifier (URI) prefixes handled by this HttpListener object.

Realm

Získá nebo nastaví sféru nebo oddíl prostředků, které jsou přidruženy k tomuto HttpListener objektu.Gets or sets the realm, or resource partition, associated with this HttpListener object.

TimeoutManager

Správce časových limitů pro tuto HttpListener instanci.The timeout manager for this HttpListener instance.

UnsafeConnectionNtlmAuthentication

Načítá nebo nastavuje Boolean hodnotu, která určuje, jestli se při použití protokolu NTLM pro ověření vyžadují další požadavky, které používají stejné připojení TCP (Transmission Control Protocol).Gets or sets a Boolean value that controls whether, when NTLM is used, additional requests using the same Transmission Control Protocol (TCP) connection are required to authenticate.

Metody

Abort()

HttpListenerOkamžitě vypne objekt a zahodí všechny aktuálně zařazené požadavky.Shuts down the HttpListener object immediately, discarding all currently queued requests.

BeginGetContext(AsyncCallback, Object)

Spustí asynchronní načtení příchozího požadavku.Begins asynchronously retrieving an incoming request.

Close()

Vypne HttpListener .Shuts down the HttpListener.

EndGetContext(IAsyncResult)

Dokončí asynchronní operaci načtení příchozího požadavku klienta.Completes an asynchronous operation to retrieve an incoming client request.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

(Zděděno od Object)
GetContext()

Čeká na příchozí požadavek a vrátí, když je jeden přijatý.Waits for an incoming request and returns when one is received.

GetContextAsync()

Čeká na příchozí požadavek jako na asynchronní operaci.Waits for an incoming request as an asynchronous operation.

GetHashCode()

Slouží jako výchozí funkce hash.Serves as the default hash function.

(Zděděno od Object)
GetType()

Získá Type aktuální instanci.Gets the Type of the current instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří kopii aktuálního seznamu Object .Creates a shallow copy of the current Object.

(Zděděno od Object)
Start()

Umožňuje této instanci přijímat příchozí požadavky.Allows this instance to receive incoming requests.

Stop()

Způsobí, že tato instance přestane přijímat nové příchozí žádosti a ukončí zpracování všech probíhajících žádostí.Causes this instance to stop receiving new incoming requests and terminates processing of all ongoing requests.

ToString()

Vrátí řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Zděděno od Object)

Explicitní implementace rozhraní

IDisposable.Dispose()

Uvolňuje prostředky držené tímto HttpListener objektem.Releases the resources held by this HttpListener object.

Platí pro