|
|
Objavljeno na 21. 12. 2015 11:00:26
|
|
|

Za dodatno poenostavitev poslušalcev za HTTP protokol, . .NET zagotavlja razred HttpListener v imenskem prostoru System.Net. Ob tem objektu je . .NET ponuja vrsto povezanih objektov, ki kapsulirajo HTTP procesno delo. Upoštevajte, da ta razred uporablja Http.sys sistemske komponente za opravljanje naloge, zato ga je mogoče uporabljati le na operacijskih sistemih Windows XPSP2 ali Server 2003 ali novejših.
Razred HttpListener še dodatno poenostavi poslušanje in mora skozi metodo poslušanja zagotoviti le naslov poslušanja, številko vrat in virtualno pot skozi metodo nizov, da se začne poslušanje.
Po začetku poslušanja bo metoda GetContext blokirala nit, ko prispe zahtevek odjemalca, HttpListener vrne objekt HttpListenerContext kot splošni proxy za obdelavo zahtevkov odjemalca; preko lastnosti Request objekta proxy lahko dobimo objekt tipa HttpListenerRequest, ki predstavlja parametre zahteve, ta objekt objektivizira večino parametrov zahtev, tako da , parametre zahteve lahko dobimo preko niza lastnosti, ki jih zagotavlja. Na primer, lastnost HttpMethod v HttpListenerRequest zagotavlja zahtevani tip metode. S pomočjo atributa Odziv proxyja lahko dobimo objekt za obdelavo odziva tipa HttpListenerResponse, ki zajema podatke in operacije odziva, kar močno poenostavi programsko obremenitev odziva, delovni proces pa je naslednji:
//检查系统是否支持 če (! HttpListener.IsSupported)
{ throw new System.InvalidOperationException( "Za uporabo HttpListenerja morate biti na Windows XP SP2 ali Server 2003 ali novejši!" );
} Upoštevajte, da se mora predpona končati z / naprej predpone niz[] = nov niz[] { "http://localhost:49152/" }; Ustvarite poslušalca. HttpListener listener = novi HttpListener(); Dodaj predpono monitorja. foreach (niz s v predponah)
{ poslušalec. Predpone.Add(s);
} Začnite poslušati poslušalec. Start(); Console.WriteLine(" poslušanje..."); medtem ko (res)
{ Opomba: Metoda GetContext bo blokirala nit, dokler zahteva ne prispe HttpListenerContext context = poslušalec. GetContext(); Pridobite objekt zahteve HttpListenerRequest request = kontekst. Prošnja; Console.WriteLine("{0} {1} HTTP/1.1", request. HttpMethod, zahteva. RawUrl); Console.WriteLine("Sprejmi: {0}"), string. Pridruži se (",", zahteva. AcceptTypes)); Console.WriteLine ("Accept-Language: {0}", vrvico. Pridruži se (",", zahteva. UserLanguages)); Console.WriteLine("User-Agent: {0}", zahteva. UserAgent); Console.WriteLine("Accept-Encoding: {0}", zahteva. Glave["Accept-Encoding"]); Console.WriteLine ("Povezava: {0}", prošnjo. Keep Livev e ? "Keep-Alive" : "blizu"); Console.WriteLine("Gostitelj: {0}", zahteva. UserHostName); Console.WriteLine("Pragma: {0}"), zahteva. Naslovi["Pragma"]); Pridobite ciljno rešitev HttpListenerResponse response = kontekst. Odgovor; Sestavi vsebino odziva odziv stringaString = @"<html> <head><title>Iz HttpListener strežnika</title></head> <body><h1>pozdravljeni vsi skupaj.</h1></body> ";</html> Nastavite vsebino glave odziva, dolžino, kodiranje Odgovor. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); Odgovor. ContentType = "besedilo/html; charset=UTF-8"; Izhodni odzivi System.IO.Stream output = odziv. OutputStream; System.IO.StreamWriter writer = novi System.IO.StreamWriter(output); pisatelj. Write(responseString); Izhodni tok je treba izklopiti pisatelj. Close(); if (Console.KeyAvailable) premor;
} Ugasnite strežnik poslušalec. Stop();
Pri uporabi HttpListenerja postanejo pogosto uporabljeni parametri zahtev in odgovora objektni lastnosti, kar močno zmanjša programsko obremenitev. Vendar pa je večino parametrov še vedno treba dostopati prek indeksatorja Headers, podobno kot parameter zahteve Accept-Encoding v zgornjem primeru, do katerega ne moremo neposredno dostopati preko lastnosti. |
Prejšnji:CSS datotekam in js datotekam sledi vprašajNaslednji:Dan se je začel!! Dajmo, vsi
|