Udostępnij za pośrednictwem


Klasa System.Net.HttpListener

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

HttpListener Za pomocą klasy można utworzyć prosty odbiornik protokołu HTTP, który odpowiada na żądania HTTP. Nasłuchujący jest aktywny przez cały okres istnienia obiektu HttpListener i działa w aplikacji, używając jej uprawnień.

Aby użyć HttpListener, utwórz nowe wystąpienie klasy przy użyciu konstruktora HttpListener i użyj właściwości Prefixes, aby uzyskać dostęp do kolekcji zawierającej ciągi określające, które prefiksy identyfikatora URI (Uniform Resource Identifier) HttpListener powinien przetwarza.

Prefiks ciągu URI składa się ze schematu (http lub https), hosta, opcjonalnego portu i opcjonalnej ścieżki. Przykładem kompletnego ciągu prefiksu jest http://www.contoso.com:8080/customerData/. Prefiksy muszą kończyć się ukośnikiem do przodu ("/"). Obiekt HttpListener z prefiksem, który najlepiej pasuje do żądanego identyfikatora URI odpowiada na żądanie. Wiele HttpListener obiektów nie może dodać tego samego prefiksu; zostanie zgłoszony Win32Exception wyjątek, jeśli HttpListener doda prefiks, który jest już używany.

Po określeniu portu element hosta może zostać zastąpiony ciągiem "*", aby wskazać, że HttpListener akceptuje żądania wysyłane do portu, jeśli żądany identyfikator URI nie jest zgodny z żadnym innym prefiksem. Na przykład, aby odbierać wszystkie żądania wysyłane do portu 8080, gdy żądany identyfikator URI nie jest obsługiwany przez żaden HttpListener, prefiks to http://*:8080/. Podobnie, aby określić, że HttpListener akceptuje wszystkie żądania wysyłane do portu, zastąp element hosta znakiem "+". Na przykład https://+:8080. Znaki "*" i "+" mogą być obecne w prefiksach zawierających ścieżki.

Wieloznaczne poddomeny są obsługiwane w prefiksach URI zarządzanych przez obiekt HttpListener. Aby określić subdomenę wieloznaczną, użyj znaku "*" jako część nazwy hosta w prefiksie URI. Na przykład http://*.foo.com/. Przekaż go jako argument do Add metody .

Ostrzeżenie

Powiązania najwyższego poziomu z użyciem symboli wieloznacznych (http://*:8080/ i http://+:8080) nie powinny być używane. Powiązania z symbolami wieloznacznymi najwyższego poziomu mogą narażać aplikację na luki w zabezpieczeniach. Dotyczy to zarówno silnych, jak i słabych symboli wieloznacznych. Używaj jawnych nazw hostów zamiast symboli wieloznacznych. Powiązanie wieloznaczne poddomeny (na przykład *.mysub.com) nie niesie ze sobą takiego ryzyka dla zabezpieczeń, jeśli kontrolujesz całą domenę nadrzędną (w przeciwieństwie do *.com, która jest podatna na zagrożenia). Aby uzyskać więcej informacji , zobacz sekcję rfc7230-5.4 .

Aby rozpocząć nasłuchiwanie żądań od klientów, dodaj prefiksy identyfikatora URI do kolekcji i wywołaj metodę Start . HttpListener oferuje zarówno modele synchroniczne, jak i asynchroniczne do przetwarzania żądań klientów. Żądania i skojarzone z nimi odpowiedzi są dostępne przy użyciu obiektu HttpListenerContext zwróconego przez metodę GetContext lub jej asynchroniczne odpowiedniki, metody BeginGetContext i EndGetContext.

Model synchroniczny jest odpowiedni, jeśli aplikacja powinna blokować się podczas oczekiwania na żądanie klienta i jeśli chcesz przetworzyć tylko jedno żądanie naraz. Używając modelu synchronicznego, wywołaj metodę GetContext , która czeka na wysłanie żądania przez klienta. Metoda zwraca obiekt HttpListenerContext do przetwarzania, gdy wystąpi zdarzenie.

W bardziej złożonym modelu asynchronicznym aplikacja nie blokuje się podczas oczekiwania na żądania, a każde żądanie jest przetwarzane we własnym wątku wykonawczym. BeginGetContext Użyj metody , aby określić metodę zdefiniowaną przez aplikację, która ma być wywoływana dla każdego żądania przychodzącego. W ramach tej metody wywołaj metodę EndGetContext , aby uzyskać żądanie, przetworzyć je i odpowiedzieć.

W obu modelach uzyskuje się dostęp do przychodzących żądań za pomocą właściwości HttpListenerContext.Request i są one reprezentowane przez obiekty HttpListenerRequest. Podobnie dostęp do odpowiedzi uzyskuje się, korzystając z właściwości HttpListenerContext.Response, i są one reprezentowane przez obiekty HttpListenerResponse. Te obiekty dzielą pewną funkcjonalność z obiektami HttpWebRequest i HttpWebResponse, ale te ostatnie obiekty nie mogą być używane w połączeniu z HttpListener ponieważ implementują zachowania klienta, a nie zachowania serwera.

Element HttpListener może wymagać uwierzytelniania klienta. Można określić określony schemat do użycia na potrzeby uwierzytelniania lub określić delegata, który określa schemat do użycia. Aby uzyskać informacje o tożsamości klienta, musisz wymagać pewnej formy uwierzytelniania. Aby uzyskać dodatkowe informacje, zobacz właściwości User, AuthenticationSchemes, i AuthenticationSchemeSelectorDelegate.

Uwaga / Notatka

Jeśli tworzysz HttpListener za pomocą protokołu https, musisz wybrać certyfikat serwera dla tego nasłuchującego. W przeciwnym razie żądania do tego HttpListener zakończą się niepowodzeniem z powodu nieoczekiwanego zamknięcia połączenia.

Uwaga / Notatka

Certyfikaty serwera i inne opcje nasłuchujące można skonfigurować przy użyciu Network Shell (netsh.exe). Aby uzyskać więcej informacji, zobacz Network Shell (Netsh). Plik wykonywalny był dostarczany wraz z systemami Windows Server 2008 i Windows Vista.

Uwaga / Notatka

Jeśli określisz wiele schematów uwierzytelniania dla HttpListener, odbiornik będzie kwestionować klientów w następującej kolejności: Negotiate, NTLM, Digest, a następnie Basic.

HTTP.sys

Klasa HttpListener jest oparta na HTTP.sys, który jest odbiornikiem trybu jądra obsługującym cały ruch HTTP dla Windows. HTTP.sys Zapewnia zarządzanie połączeniami, ograniczanie przepustowości i rejestrowanie serwera internetowego. Użyj narzędzia HttpCfg.exe , aby dodać certyfikaty SSL.