HttpListener Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje jednoduchý programově řízený naslouchací proces protokolu HTTP. Tato třída se nemůže dědit.
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
// 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
HttpListener Pomocí třídy můžete vytvořit jednoduchý naslouchací proces protokolu HTTP, který reaguje na požadavky HTTP. Posluchač je aktivní po celou dobu života objektu HttpListener a běží v rámci vaší aplikace s vašimi oprávněními.
Chcete-li použít HttpListener, vytvořte novou instanci třídy pomocí konstruktoru HttpListener a pomocí vlastnosti Prefixes získáte přístup ke kolekci, která obsahuje řetězce určující, které předpony identifikátoru URI (Uniform Resource Identifier) by měl HttpListener zpracovat.
Řetězec předpony identifikátoru URI se skládá ze schématu (http nebo https), hostitele, volitelného portu a volitelné cesty. Příkladem úplného předponového řetězce je http://www.contoso.com:8080/customerData/. Předpony musí končit lomítkem ("/"). Objekt HttpListener s předponou, která nejvíce odpovídá požadovanému identifikátoru URI, odpoví na požadavek. Více HttpListener objektů nemůže přidat stejnou předponu. Výjimka Win32Exception se vyvolá, pokud přidá předponu HttpListener , která se už používá.
Pokud je zadaný port, může být prvek hostitele nahrazen znakem *, který označuje, že HttpListener přijímá požadavky odeslané na port, pokud požadovaný identifikátor URI neodpovídá žádné jiné předponě. Pokud například chcete přijímat všechny požadavky odeslané na port 8080, pokud požadovaný identifikátor URI nezpracuje žádný HttpListener, předpona je http://*:8080/. Podobně pokud chcete určit, že HttpListener přijímá všechny požadavky odeslané na port, nahraďte prvek hostitele znakem +. Například: https://+:8080. Znaky "*" a "+" mohou být obsaženy v předponách, které zahrnují cesty.
Podporováno je používání subdomén se zástupnými znaky v URI předponách, které jsou spravovány objektem HttpListener. Chcete-li zadat subdoménu se zástupnými znaky, použijte znak "*" jako součást názvu hostitele v předponě identifikátoru URI. Například http://*.foo.com/. Předejte toto jako argument metodě Add.
Warning
Vazby se zástupnými znaky nejvyšší úrovně (http://*:8080/ a http://+:8080) by se neměly používat. Vazby se zástupnými znaky na nejvyšší úrovni můžou vystavit vaši aplikaci bezpečnostním rizikům. Týká se to silných i slabých zástupných znaků. Místo zástupných znaků používejte explicitní názvy hostitelů. Vazeb subdomén se zástupnými znaky (například *.mysub.com) se toto bezpečnostní riziko netýká, pokud máte kontrolu nad celou nadřazenou doménou (na rozdíl od vazby *.com, která je zranitelná). Další informace najdete v dokumentu rfc7230 section-5.4 .
Pokud chcete začít naslouchat žádostem od klientů, přidejte do kolekce předpony identifikátoru URI a volejte metodu Start . HttpListener nabízí synchronní i asynchronní modely pro zpracování požadavků klientů. Požadavky a jejich přidružené odpovědi jsou přístupné pomocí objektu HttpListenerContext vráceného GetContext metodou nebo jeho asynchronními protějšky, a BeginGetContextEndGetContext metody.
Synchronní model je vhodný, pokud by vaše aplikace měla blokovat při čekání na požadavek klienta a pokud chcete zpracovat pouze jeden požadavek najednou. Pomocí synchronního modelu zavolejte metodu GetContext , která čeká na odeslání požadavku klientem. Metoda vrátí HttpListenerContext objekt pro zpracování, když k tomu dojde.
V složitějším asynchronním modelu aplikace neblokuje čekání na požadavky a každý požadavek se zpracuje ve vlastním vlákně spuštění. Tuto metodu BeginGetContext použijte k určení metody definované aplikací, která se má volat pro každý příchozí požadavek. V rámci této metody zavolejte metodu EndGetContext , která získá požadavek, zpracuje ji a odpoví.
V obou modelech je přistupováno k příchozím požadavkům pomocí vlastnosti HttpListenerContext.Request a jsou reprezentovány objekty HttpListenerRequest. Podobně jsou odpovědi přístupné pomocí HttpListenerContext.Response vlastnosti a jsou reprezentovány HttpListenerResponse objekty. Tyto objekty sdílejí některé funkce s HttpWebRequest objekty a HttpWebResponse objekty, ale tyto objekty nelze použít ve spojení s HttpListener tím, že implementují chování klienta, nikoli serveru.
HttpListener může vyžadovat autentizaci klienta. Můžete zadat konkrétní schéma, které se má použít pro ověřování, nebo můžete zadat delegáta, který určuje schéma, které se má použít. K získání informací o identitě klienta musíte vyžadovat určitou formu ověřování. Další informace o vlastnostech naleznete v tématu User, AuthenticationSchemes a AuthenticationSchemeSelectorDelegate.
Note
Pokud vytvoříte HttpListener pomocí HTTPS, musíte pro tento posluchač vybrat certifikát serveru. V opačném případě požadavky na toto HttpListener selžou kvůli neočekávanému uzavření spojení.
Note
Certifikáty serveru a další možnosti naslouchacího procesu můžete nakonfigurovat pomocí prostředí Network Shell (netsh.exe). Další podrobnosti najdete v Network Shell (Netsh). Spustitelný soubor se začal distribuovat se systémy Windows Server 2008 a Windows Vista.
Note
Pokud pro HttpListener zadáte více schémat ověřování, naslouchací proces vyzve klienty v následujícím pořadí: Negotiate, NTLM, Digest, a pak Basic.
HTTP.sys
Třída HttpListener je postavena na HTTP.sys, což je naslouchací proces režimu jádra, který zpracovává veškerý provoz HTTP pro Windows.
HTTP.sys poskytuje správu připojení, omezování šířky pásma a protokolování webového serveru.
Pomocí nástroje HttpCfg.exe přidejte certifikáty SSL.
Od verze .NET 11 podporuje implementace HTTP.sys Windows HttpListener povolení ukládání odpovědí na úrovni jádra do vyrovnávací paměti. Když je funkce povolená, data odpovědí se uloží do vyrovnávací paměti HTTP.sys před odesláním klientovi, což může zlepšit propustnost pro připojení s vysokou latencí. To lze povolit voláním AppContext.SetSwitch metody následujícím způsobem:
AppContext.SetSwitch("System.Net.HttpListener.EnableKernelResponseBuffering", true);
Konstruktory
| Name | Description |
|---|---|
| HttpListener() |
Inicializuje novou instanci HttpListener třídy. |
Vlastnosti
| Name | Description |
|---|---|
| AuthenticationSchemes |
Získá nebo nastaví schéma použité k ověřování klientů. |
| AuthenticationSchemeSelectorDelegate |
Získá nebo nastaví delegát volána k určení protokolu použitého k ověřování klientů. |
| DefaultServiceNames |
Získá výchozí seznam názvů poskytovatelů služeb (SPN) určený registrovanými předponami. |
| ExtendedProtectionPolicy |
Získá nebo nastaví ExtendedProtectionPolicy použití pro rozšířenou ochranu relace. |
| ExtendedProtectionSelectorDelegate |
Získá nebo nastaví delegát volal určit ExtendedProtectionPolicy použití pro každý požadavek. |
| IgnoreWriteExceptions |
Získá nebo nastaví Boolean hodnotu, která určuje, zda vaše aplikace obdrží výjimky, ke kterým dojde při HttpListener odeslání odpovědi klientovi. |
| IsListening |
Získá hodnotu, která označuje, zda HttpListener byla spuštěna. |
| IsSupported |
Získá hodnotu, která označuje, zda HttpListener lze použít s aktuálním operačním systémem. |
| Prefixes |
Získá předpony URI (Uniform Resource Identifier) zpracovávané tímto HttpListener objektem. |
| Realm |
Získá nebo nastaví sféru nebo oddíl prostředku přidružený k tomuto HttpListener objektu. |
| TimeoutManager |
Správce časového limitu pro tuto HttpListener instanci. |
| UnsafeConnectionNtlmAuthentication |
Získá nebo nastaví Boolean hodnotu, která určuje, zda se při použití NTLM, další požadavky používající stejné připojení TCP (Transmission Control Protocol) jsou vyžadovány k ověření. |
Metody
| Name | Description |
|---|---|
| Abort() |
Vypne HttpListener objekt okamžitě a zahodí všechny aktuálně zařazené požadavky do fronty. |
| BeginGetContext(AsyncCallback, Object) |
Začne asynchronně načítat příchozí požadavek. |
| Close() |
Vypne HttpListener. |
| EndGetContext(IAsyncResult) |
Dokončí asynchronní operaci, která načte příchozí požadavek klienta. |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetContext() |
Čeká na příchozí požadavek a vrátí se, když je přijat. |
| GetContextAsync() |
Čeká na příchozí požadavek jako asynchronní operace. |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| Start() |
Umožňuje této instanci přijímat příchozí požadavky. |
| Stop() |
Způsobí, že tato instance přestane přijímat nové příchozí požadavky a ukončí zpracování všech probíhajících požadavků. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| IDisposable.Dispose() |
Uvolní prostředky uchovávané tímto HttpListener objektem. |