Helpottaakseen kuuntelijoita HTTP-protokollalle, . .NET tarjoaa HttpListener-luokan nimiavaruudessa System.Net. Tämän esineen mukana . .NET tarjoaa sarjan toisiinsa liittyviä objekteja, jotka kapseloivat HTTP-käsittelytyön. Huomaa, että tämä luokka käyttää Http.sys järjestelmäkomponentteja työn suorittamiseen, joten sitä voi käyttää vain Windows XPSP2:ssa tai Server 2003:ssa tai uudemmissa käyttöjärjestelmissä.
HttpListener-luokka yksinkertaistaa kuuntelutoimintoa entisestään, ja sen tarvitsee vain antaa kuunteluosoite, porttinumero ja virtuaalinen reitti string-menetelmän läpi aloittaakseen kuuntelutyön.
Kuuntelun alkamisen jälkeen GetContext-metodi estää säikeen, kun asiakkaan pyyntö saapuu, HttpListener palauttaa HttpListenerContext-objektin yleisenä välityspalvelimena asiakaspyyntöjen käsittelyyn. Proxy-objektin Request-ominaisuuden kautta saadaan objekti tyypistä HttpListenerRequest, joka edustaa pyyntöparametreja, tämä objektifi suurimman osan pyyntöparametreista, joten , voimme saada pyyntöparametrit sarjan ominaisuuksien kautta, joita se tarjoaa. Esimerkiksi HttpListenerRequestin HttpMethod-ominaisuus antaa pyydetyn metodityypin. Välityspalvelimen Response-attribuutin kautta voimme saada vastauksenkäsittelyobjektin tyyppisellä HttpListenerResponse, joka kapseloi vastauksen tiedot ja toiminnot, mikä yksinkertaistaa huomattavasti vastauksen ohjelmointikuormaa, ja työprosessi on seuraava:
//检查系统是否支持 jos (! httpListener.IsSupported)
{ throw new System.InvalidOperationException( "Käyttääksesi HttpListeneriä, sinun täytyy käyttää Windows XP SP2:ta tai Server 2003:ta tai uudempaa!" );
} Huomaa, että etuliitteen tulee päättyä / eteenpäin suuntaviivoon merkkijono[] etuliitteet = uusi merkkijono[] { "http://localhost:49152/" }; Luo kuuntelija. HttpListener listener = uusi HttpListener(); Lisää näytön etuliite. foreach (merkkijono s etuliitteissä)
{ Kuuntelija. Prefixes.Add(s);
} Aloita kuunteleminen Kuuntelija. Start(); Console.WriteLine("kuuntelee..."); kun (totta)
{ Huomautus: GetContext-metodi estää säikeen siihen asti, kunnes pyyntö saapuu HttpListenerContext Context = kuuntelija. GetContext(); Hae pyyntöobjekti HttpListenerRequest-pyyntö = konteksti. Pyyntö; Console.WriteLine("{0} {1} HTTP/1.1", pyyntö. HttpMethod, pyyntö. RawUrl); Console.WriteLine("Hyväksy: {0}", merkkijono. Liity (",", pyyntö. AcceptTypes)); Console.WriteLine("Hyväksy-kieli: {0}", naru. Liity (",", pyyntö. UserLanguages)); Console.WriteLine("User-Agent: {0}", pyyntö. UserAgent); Console.WriteLine("Accept-Encoding: {0}", pyyntö. Headers["Accept-Encoding"]); Console.WriteLine("Yhteys: {0}", pyyntö. Säilytä? "Pysy elossa": "lähellä"); Console.WriteLine("Host: {0}", pyyntö. UserHostName); Console.WriteLine("Pragma: {0}", pyyntö. Headers["Pragma"]); Hanki vastauskohde HttpListenerResponse-vastaus = konteksti. Vastaus; Rakenna vastaussisältö merkkijonovastausString = @"<html> <head><title>HttpListener Serveriltä</title></head> <body><h1>Moi maailma.</h1></body> ";</html> Aseta vastauksen otsikon sisältö, pituus, koodaus Vastaus. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount (responseString); Vastaus. ContentType = "teksti/html; charset=UTF-8"; Tulosvasteet System.IO.Stream ulostulo = vaste. OutputStream; System.IO.StreamWriter writer = uusi System.IO.StreamWriter(output); kirjoittaja. Write(responseString); Lähtövirta on sammutettava kirjoittaja. Close(); if (Console.KeyAvailable) tauko;
} Sulje palvelin Kuuntelija. Stop();
HttpListeneriä käytettäessä yleisesti käytetyt pyyntö- ja vastausparametrit muuttuvat objektin ominaisuuksiksi, mikä vähentää ohjelmointikuormaa huomattavasti. Kuitenkin suurin osa parametreista täytyy silti käyttää Headers-indeksoijan kautta, aivan kuten yllä olevaan Accept-Encoding-pyyntöparametriin, johon emme pääse suoraan ominaisuuksien kautta. |