|
|
Paskelbta 2015-12-21 11:00:26
|
|
|

Norėdami dar labiau supaprastinti HTTP protokolo klausytojus, . .NET pateikia HttpListener klasę vardų srities System.Net. Kartu su šiuo objektu, . .NET pateikia daugybę susijusių objektų, kurie apibendrina HTTP apdorojimo darbą. Atkreipkite dėmesį, kad ši klasė naudoja Http.sys sistemos komponentus, todėl ją galima naudoti tik Windows XPSP2 arba Server 2003 ar naujesnėse operacinėse sistemose.
"HttpListener" klasė dar labiau supaprastina klausymosi operaciją ir norint pradėti klausymosi darbą, tereikia pateikti klausymosi adresą, prievado numerį ir virtualų kelią per eilutės metodą.
Pradėjęs klausytis, "GetContext" metodas užblokuos giją, kai gaunama kliento užklausa, "HttpListener" grąžina "HttpListenerContext" objektą kaip bendrą kliento užklausų apdorojimo tarpinį serverį, per tarpinio serverio objekto ypatybę "Request" galime gauti "HttpListenerRequest" tipo objektą, atstovaujantį užklausos parametrus, šis objektas objektyvizuoja daugumą užklausos parametrų, taigi , užklausos parametrus galime gauti naudodami daugybę jo teikiamų savybių. Pavyzdžiui, HttpListenerRequest ypatybė HttpMethod pateikia prašomą metodo tipą. Naudodami tarpinio serverio atributą Atsakymas galime gauti HttpListenerResponse tipo atsakymo apdorojimo objektą, kuris apima atsakymo duomenis ir operacijas, o tai labai supaprastina atsakymo programavimo darbo krūvį, o darbo procesas yra toks:
//检查系统是否支持 jei (! HttpListener.IsSupported)
{ mesti naują System.InvalidOperationException( "Norėdami naudoti "HttpListener", turite naudoti "Windows XP SP2" arba "Server 2003" arba naujesnę versiją!" );
} Atkreipkite dėmesį, kad priešdėlis turi baigtis pasviruoju brūkšniu string[] priešdėliai = nauja eilutė[] { "http://localhost:49152/" }; Sukurkite klausytoją. HttpListener klausytojas = naujas HttpListener(); Pridėkite monitoriaus priešdėlį. foreach (eilutė s priešdėliuose)
{ klausytojas. Priešdėliai.Pridėti (-ai);
} Pradėkite klausytis klausytojas. Pradžia(); Console.WriteLine(" klausymas..."); nors (tiesa)
{ Pastaba: GetContext metodas užblokuos giją, kol gausite užklausą HttpListenerContext context = klausytojas. GetContext(); Gauti užklausos objektą HttpListenerRequest užklausa = kontekstas. Prašymas; Console.WriteLine("{0} {1} HTTP/1.1", užklausa. HttpMethod, užklausa. RawUrl); Console.WriteLine("Priimti: {0}", eilutė. Prisijungti(",", užklausa. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", eilutė. Prisijungti(",", užklausa. UserLanguages)); Console.WriteLine("Vartotojo agentas: {0}", užklausa. UserAgent); Console.WriteLine("Accept-Encoding: {0}", užklausa. antraštės["Accept-Encoding"]); Console.WriteLine("Ryšys: {0}", prašymą. KeepAliv e ? "Keep Alive" : "uždaryti"); Console.WriteLine("Pagrindinis kompiuteris: {0}", užklausa. UserHostName); Console.WriteLine("Pragma: {0}", užklausa. Antraštės["Pragma"]); Gaukite atsakymo tikslą HttpListenerResponse atsakymas = kontekstas. Atsakymas; Atsakymo turinio kūrimas eilutės atsakymasEilutė = @"<html> <head><title>Iš HttpListener serverio</title></head> <body><h1>sveikas, pasauli.</h1></body> ";</html> Atsakymo antraštės turinio, ilgio, kodavimo nustatymas atsakymas. Turinio ilgis64 = System.Text.Encoding.UTF8.GetByteCount(responseString); atsakymas. ContentType = "tekstas/html; simbolių rinkinys=UTF-8"; Išvesties atsakymai System.IO.Stream išvestis = atsakymas. Išvesties srautas; System.IO.StreamWriter rašytojas = naujas System.IO.StreamWriter(išvestis); rašytojas. Write(responseString); Išvesties srautas turi būti išjungtas rašytojas. Uždaryti (); if (Console.KeyAvailable) pertrauka;
} Išjunkite serverį klausytojas. Stop();
Naudojant HttpListener, dažniausiai naudojami užklausos ir atsakymo parametrai tampa objekto ypatybėmis, o tai labai sumažina programavimo darbo krūvį. Tačiau daugumą parametrų vis tiek reikia pasiekti naudojant antraščių indeksavimo priemonę, kaip ir aukščiau pateiktame pavyzdyje pateiktą užklausos parametrą "Accept-Encoding", kurio negalime pasiekti tiesiogiai per ypatybes. |
Ankstesnis:Po CSS failų ir js failų yra klaustukasKitą:Diena prasidėjo! Nagi, visi
|