Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 17368|Atsakyti: 0

[Šaltinis] HttpListener pagrįstas žiniatinklio serveris

[Kopijuoti nuorodą]
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 klaustukas
Kitą:Diena prasidėjo! Nagi, visi
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com