Sdílet prostřednictvím


System.Net.HttpListener – třída

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

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.

Výstraha

Vazby se zástupnými znaky nejvyšší úrovně (http://*:8080/ a http://+:8080) by se neměly používat. Vazby nejvyšší úrovně s víceznakovými zástupnými symboly mohou vystavit vaši aplikaci bezpečnostním zranitelnostem. 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.

Poznámka:

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í.

Poznámka:

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.

Poznámka:

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.