Pentru a simplifica și mai mult ascultătorii pentru protocolul HTTP, . .NET oferă clasa HttpListener în spațiul de nume System.Net. Însoțind acest obiect, . .NET oferă o serie de obiecte înrudite care încapsulează munca de procesare HTTP. Rețineți că această clasă folosește Http.sys componente de sistem pentru a face treaba, astfel încât poate fi folosită doar pe sistemele de operare Windows XPSP2 sau Server 2003 sau ulterioare.
Clasa HttpListener simplifică și mai mult operația de ascultare și trebuie doar să furnizeze adresa de ascultare, numărul portului și calea virtuală prin metoda stringurilor pentru a începe munca de ascultare.
După ce începe să asculte, metoda GetContext va bloca firul de execuție, iar când cererea clientului sosește, HttpListener returnează un obiect HttpListenerContext ca proxy general pentru procesarea cererilor clientului, prin proprietatea Request a obiectului proxy, putem obține un obiect de tip HttpListenerRequest care reprezintă parametrii cererii, acest obiect obiectificând majoritatea parametrilor cererii, deci , putem obține parametrii cererii printr-o serie de proprietăți pe care le oferă. De exemplu, proprietatea HttpMethod a HttpListenerRequest oferă tipul de metodă solicitat. Prin atributul Response al proxy-ului, putem obține un obiect de procesare a răspunsului de tip HttpListenerResponse, care cuprinde datele și operațiile răspunsului, ceea ce simplifică considerabil volumul de lucru de programare al răspunsului, iar procesul de lucru este următorul:
//检查系统是否支持 dacă (! HttpListener.IsSupported)
{ throw new System.InvalidOperationException( "Pentru a folosi HttpListener, trebuie să fii pe Windows XP SP2 sau Server 2003 sau mai târziu!" );
} Rețineți că prefixul trebuie să se termine cu o bară oblică / înainte string[] prefixe = new string[] { "http://localhost:49152/" }; Creează un ascultător. Ascultător HttpAscultător = Ascultător HttpNou(); Adaugă prefixul monitorului. foreach (șiruri s în prefixe)
{ Ascultător. Prefixe. Adaugă;
} Începe să asculți Ascultător. Start(); Console.WriteLine(" ascultând..."); în timp ce (adevărat)
{ Notă: Metoda GetContext va bloca firul până când cererea va ajunge HttpListenerContext = ascultător. GetContext(); Obține obiectul de cerere Cerere HttpListenerRequest = context. Cerere: cerere Console.WriteLine("{0} {1} HTTP/1.1". HttpMethod, cerere. RawUrl); Console.WriteLine("Accept: {0}", string. Join(",", cerere. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", Șnur. Join(",", cerere. LimbajeUtilizator)); Console.WriteLine("User-Agent: {0}", solicitare. UserAgent); Cerere Console.WriteLine ("Accept-Encoding: {0}". antete["Accept-Encoding"]); Console.WriteLine("Connection: {0}", cerere. KeepAlive e ? "Păstrează-Alive" : "aproape"); Cerere Console.WriteLine("Host: {0}". UserHostName); Cerere Console.WriteLine("Pragma: {0}". antete["Pragma"]); Obține ținta de răspuns HttpListenerResponse răspuns = context. Răspuns; Construiește conținutul răspunsului Răspuns string String = @"<html> <head><title>De la HttpListener Server</title></head> <body><h1>bună oameni buni.</h1></body> ";</html> Setează conținutul antetului răspunsului, lungimea, codarea răspuns. ConținutLungime64 = System.Text.Encoding.UTF8.GetByteCount(responseString); răspuns. ContentType = "text/html; caractere=UTF-8"; Răspunsuri la ieșire System.IO.Stream output = răspuns. OutputStream; System.IO.StreamWriter scriitor = noul System.IO.StreamWriter(output); scriitor. Write(responseString); Fluxul de ieșire trebuie oprit scriitor. Apropiat(); if (Console.KeyAvailable) pauză;
} Închide serverul Ascultător. Stop();
Când se folosește HttpListener, parametrii de cerere și răspuns utilizați frecvent devin proprietăți ale obiectului, ceea ce reduce semnificativ sarcina de lucru de programare. Totuși, majoritatea parametrilor trebuie totuși accesați prin indexatorul Headers, la fel ca parametrul de cerere Accept-Encoding din exemplul de mai sus, la care nu putem accesa direct prin proprietăți. |