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. Naslouchací proces je aktivní po celou dobu života objektu HttpListener a běží v aplikaci s jeho oprávněními.

Chcete-li použít HttpListener, vytvořte novou instanci třídy pomocí HttpListener konstruktoru a pomocí Prefixes vlastnosti získat přístup k kolekci, která obsahuje řetězce určující, které identifikátor URI (Uniform Resource Identifier) předpony by HttpListener měl proces 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 kompletního řetězce předpony 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 přítomné v předponách, které zahrnují cesty.

Subdomény se zástupnými čísly jsou podporovány v předponách identifikátorů URI, 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 tuto metodu Add jako argument.

Upozorňující

Vazby se zástupnými znaky nejvyšší úrovně (http://*:8080/ a http://+:8080) by se neměly používat. Vazby nejvyšší úrovně se zástupnými znaky můžou vaši aplikaci vystavit ohrožení zabezpečení. 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 tady: 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ž nastane.

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 se příchozí požadavky přistupují pomocí HttpListenerContext.Request vlastnosti a jsou reprezentovány HttpListenerRequest objekty. 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.

Může HttpListener vyžadovat ověření 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 naleznete v tématu User, AuthenticationSchemesa AuthenticationSchemeSelectorDelegate vlastnosti.

Poznámka:

Pokud vytvoříte protokol HttpListener HTTPS, musíte pro tento naslouchací proces vybrat certifikát serveru. V opačném případě požadavky na toto HttpListener připojení selžou s neočekávaným uzavřením připojení.

Poznámka:

Certifikáty serveru a další možnosti naslouchacího procesu můžete nakonfigurovat pomocí služby Network Shell (netsh.exe). Další podrobnosti najdete v tématu Network Shell (Netsh ). Spustitelný soubor začal dodávat se systémem Windows Server 2008 a Windows Vista.

Poznámka:

Pokud pro naslouchací HttpListenerproces zadáte více schémat ověřování, vyzve klienty v následujícím pořadí: Negotiate, DigestNTLMa 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.