Udostępnij za pośrednictwem


System.Net.HttpListener, klasa

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. Odbiornik jest aktywny przez cały okres istnienia HttpListener obiektu i jest uruchamiany w aplikacji z jego uprawnieniami.

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

Ciąg prefiksu identyfikatora 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; Win32Exception wyjątek jest zgłaszany w przypadku HttpListener dodania prefiksu, 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 HttpListenerelement , 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.

Poddomeny z symbolami wieloznacznymi są obsługiwane w prefiksach identyfikatorów URI zarządzanych przez HttpListener obiekt. Aby określić poddomenę z symbolami wieloznacznymi, użyj znaku "*" jako części nazwy hosta w prefiksie identyfikatora URI. Na przykład http://*.foo.com/. Przekaż go jako argument do Add metody .

Ostrzeżenie

Powiązania symboli wieloznacznych najwyższego poziomu (http://*:8080/ i http://+:8080) nie powinny być używane. Powiązania z symbolami wieloznacznymi najwyższego poziomu mogą otworzyć aplikację na luki w zabezpieczeniach. Dotyczy to zarówno silnych, jak i słabych symboli wieloznacznych. Użyj raczej jawnych nazw hostów, a nie 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 dokument rfc7230 sekcja-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 HttpListenerContext obiektu zwróconego GetContext przez metodę lub jego asynchroniczne odpowiedniki, BeginGetContext metody 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 HttpListenerContext obiekt do przetwarzania, gdy wystąpi.

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 wykonywania. 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 dostęp do żądań przychodzących jest uzyskiwany przy użyciu HttpListenerContext.Request właściwości i są reprezentowane przez HttpListenerRequest obiekty. Podobnie dostęp do odpowiedzi uzyskuje się przy użyciu HttpListenerContext.Response właściwości i są reprezentowane przez HttpListenerResponse obiekty. Te obiekty współużytkują pewne funkcje z obiektami HttpWebRequest i HttpWebResponse , ale te ostatnie obiekty nie mogą być używane w połączeniu z HttpListener tym, że implementują klienta, a nie serwer, zachowania.

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 Userwłaściwości , AuthenticationSchemesi AuthenticationSchemeSelectorDelegate .

Uwaga

Jeśli tworzysz przy HttpListener użyciu protokołu https, musisz wybrać certyfikat serwera dla tego odbiornika. W przeciwnym razie żądania do tego HttpListener procesu zakończą się niepowodzeniem z nieoczekiwanym zamknięciem połączenia.

Uwaga

Certyfikaty serwera i inne opcje odbiornika można skonfigurować przy użyciu powłoki sieciowej (netsh.exe). Aby uzyskać więcej informacji, zobacz Network Shell (Netsh). Plik wykonywalny rozpoczął wysyłkę z systemami Windows Server 2008 i Windows Vista.

Uwaga

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

HTTP.sys

Klasa HttpListener jest oparta na HTTP.syssystemie , który jest odbiornikiem trybu jądra, który obsługuje cały ruch HTTP dla systemu 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.