Bővítése a csővezeték http

Alkalmazás esemény szállítószalag nem korlátozódik kérelmek webes űrlapok .aspx. Azt is használják abban az esetben, ha vannak speciális processzorok szolgálnak bizonyos típusú fájlokat.

Miért lehet szükség, hogy hozzon létre egy egyéni felvezető? A legtöbb esetben ez nem szükséges. Néha azonban még mindig kéznél van egy alacsony szintű interfészt, amely még hozzáférést biztosít hasznos tárgyak, például intézkedési és kér, de nem az egész modell segítségével a webes űrlap a sok ellenőrzés.

Dugaszolható építészet ASP.NET lehetővé teszi, hogy ilyen forgatókönyv hihetetlenül egyszerű. Például az új rakodók adott típusú fájlok akkor „kapcsolódni”, egyszerűen úgy, hogy a megfelelő konfigurációs paramétereket. Azonban, először meg kell foglalkozni azzal a ténnyel, hogy a HTTP gázvezeték.

HTTP rakodók

Minden belépő ASP.NET alkalmazás kérést kezelnek kifejezetten erre a komponens, amely az úgynevezett HTTP felvezető (HTTP kezelő). HTTP rakodók fontos szerepet játszanak az ASP.NET lekérdezés szerkezetét. Mert fájlkiszolgáláshoz különböző típusú HTTP rakodók használják ASP.NET. Például weboldalai kezelőt, amely objektumokat hoz létre az oldal és annak ellenőrzése, végrehajtja a kódot, és teszi a végső HTML.

Regisztráció HTTP rakodók kétféleképpen. Ha használja a beépített Visual Studio web szerver, egy régebbi verziója IIS vagy IIS 7.x Klasszikus módban, HTTP rakodók hozzá kell adni a szakasz elem belül a web.config fájlt. Az alábbiakban ezt a helyet:

ezen belül a rész Akkor tegyük elemek regisztrálni az új gépek és elemek megszünteti a regisztrációs meglévő processzorok. A kulcs sor speciális felvezető hasonló módon látható a gyökér web.config fájlt. Az alábbiakban bemutatjuk egy kivonat ezt a fájlt:

Ha az IIS 7.x integrált mód (alapértelmezett mód), a fent leírt HTTP felvezető regisztrációs módszer nem működik. Ebben a helyzetben az IIS beolvassa a szakasz és használja a definiálva annak alfejezetben :

mint rész , új HTTP rakodók bejegyzett hozzáadásával elemek rész . Ez a kis változás a konfigurációs fájlban hangsúlyozza a komolyabb változás az IIS működési módja. A változatok az előző IIS 7 (abban az esetben indítsa el az IIS 7.x a klasszikus mód) kézhezvételét követően minden lekérdezés először ellenőrzi, amellyel a kért program társul fájltípus. Ha a fájltípus társítva ASP.NET, a IIS ASP.NET halad a fájl mechanizmus, amely olvassa a vonatkozó információkat a rakodók a web.config fájlt, és úgy dönt, hogy mit kell tenni ennek a kérésnek.

A hátránya ennek a módszernek, hogy az egész folyamat függ a kezdeti regisztrációs fájlt. Ha ASP.NET mechanizmus nem regisztrált egy bizonyos típusú fájlok, és egy speciális felvezető vagy HTTP-modul nem indul, ha kér ilyen típusú fájlra.

IIS 7.x verzió intelligensebb. Az integrált módban ez akár a feladat a kérelem elküldését megfelelő HTTP felvezető és mindig olvassa az adatokat a rakodók rész . Ha megpróbálja regisztrálni a rakodók rész , majd amikor elindítja az alkalmazást oldalon jelenik meg az IIS hiba. Ez megakadályozza, hogy a biztonsági kockázatot, mert a web-alapú alkalmazások, amelyben bizonyos rakodók végrehajtják, de valójában nem használják. (Panel hozzáadása elem . Ezt a viselkedést ki lehet kapcsolni, majd az IIS 7.x vesz részt . Azonban nem így járnának ajánlott.)

Egy egyéni HTTP-kezelőt

Ha azt szeretnénk, hogy a munka egy alacsonyabb szinten, mint a modell kínál webes űrlapok, hogy egy speciális fajtája a kezelés, akkor végre egy egyéni HTTP kezelő.

Ahhoz, hogy egyéni HTTP-kezelőt, hozzon létre egy osztályt, amely megvalósítja az interfészt IHttpHandler. Ez az osztály lehet helyezni a App_Code könyvtárban, vagy összeállított részeként önálló DLL-szerelvény (más szóval, egy külön osztály könyvtári projekt), és add hozzá a web app linket hozzá.

IHttpHandler interfész megvalósítását igényli két tagja az osztály:

ASP.NET kéri ezt a módszert, ha kéri. Itt van HTTP rakodók összes munkát. Kapcsolódás az ASP.NET belső objektumok (például kérés, válasz, és szerver) lehet HttpContext átadott objektumot, hogy ez a módszer

Miután ProcessRequest () metódus, hogy befejezze a munkát, ASP.NET ellenőrzi az ingatlan, hogy ha ez lehet például HTTP felvezető újra. Az érték true azt jelzi, hogy a HTTP felvezető objektum lehet újra felhasználni újabb kérelmet azonos típusú és értékű hamis - HTTP felvezető objektumot meg kell semmisíteni

Az alábbiakban egy példát: létrehozunk egy egyszerű HTTP kezelő. Ő egyszerűen visszaadja fix blokk HTML-jelölés a következő üzenettel:

Ha létrehoz egy kiterjesztése, mint egy osztály könyvtári projekt, akkor kell hozzá egy hivatkozást SYSTEM.WEB.DLL szerelvény, amely nagyszámú ASP.NET osztályok. E nélkül a kapcsolat, akkor nem használja ezeket a típusokat IHttpHandler és HttpContext.

Állítsa Egyéni HTTP felvezető

Miután a HTTP kezelő osztály jön létre, és elérhetővé kell tenni a webes alkalmazás (azáltal, hogy a App_Code könyvtárba, vagy linkeket), a bővítés használatra kész. A következő lépés az, hogy megváltoztatjuk a web.config fájlt az internetes alkalmazás regisztrálni HTTP kezelő. Egy példa az alábbiakban látható:

A regisztráció során megadott HTTP rakodók három fontos részből áll. Verb attribútum HTTP-kérés típusát - POST vagy GET (* használják minden típusú kérelmek). Képesség utat mutatja fájlkiterjesztések okoz HTTP kezelő. Ebben a példában a részén web.config összeköti SimpleHandler nevű osztály test.simple fájlt.

Végül type attribútum a HTTP kezelő osztály. Ez az azonosítás két részből áll. Az első rész a teljes nevét az osztály (ebben a példában - HttpExtensions.SimpleHandler). Ennek része követ vessző és a neve a szerelvény DLL-fájlt tartalmazó osztály (ebben a példában - HttpExtensions.dll). Felhívjuk figyelmét, hogy a kiterjesztés DLL mindig értik, így nem szükséges megjelölni.

Ha használja a megközelítés App_Code helyett külön összeállított szerelvény, akkor is kihagyja a nevét a DLL-fájl, mert ASP.NET generál automatikusan.

Bővítése a csővezeték http

Segítségével kezelők HTTP, nem kell konfigurálni

Az ASP.NET is támogatott alternatív megközelítés, amely elkerüli regisztráció HTTP rakodók és nem kell aggódnia, hogyan kell beállítani a beállításokat a konfigurációs fájl - Egy elismert kiterjesztése .ashx. Bármelyik változat IIS nem használják (még integrált Visual Studio web szerver), minden kérés végződő .ashx bővítmény automatikusan kezelni kéréseket szolgálja speciális HTTP kezelő.

Létrehozásához .ashx fájl a Visual Studio, válassza ki a menüből a weboldal (honlap) (vagy a Projekt menüből (Project) egy web-projekt) tétel Új elem hozzáadása (Add új elem), és adja meg a Generic Handler (General kezelő). Ezután adja meg a megfelelő nevet, majd kattintson az Add (Hozzáadás), hogy hozzon létre egy kezelőt.

.ashx fájl kezdődik WebHandler irányelvet. Ez az irányelv jelzi az osztályt, hogy biztosítani kell a fájlt. Például:

Az osztály neve megfelelnek az osztály a könyvtárban, vagy App_Code osztályt összekötő szerelvény. Azt is megteheti, meg egy osztály közvetlenül .ashx fájlt (a WebHandler irányelv). Mindenesetre, ha a felhasználó kéri a fájl .ashx megfelelő osztályra HTTP felvezető kerül végrehajtásra. Ha menteni az előző példában formájában simple.ashx fájlt, majd amikor egy ügyfél kérésére simple.ashx fog futni egy külön web-kezelő. Sőt, .ashx fájltípus regisztrálva az IIS, így a konfiguráció IIS nem szükséges, ha az alkalmazás telepítve van.

A konfigurációs fájl vagy .ashx - egy egyéni preferencia kérdése. Azonban .ashx fájlokat gyakran használják több, mint egyszerű bővítmények, amelyek célja egy webes alkalmazás. A konfigurációs fájlok is egy bizonyos rugalmasságot. Például, akkor regisztráljon a HTTP felvezető dolgozni lekérdezések, befejezve ezzel a bővítménnyel, míg .ashx fájl a kérelem teljesítését egy adott fájl nevét.

Azt is regisztrálni a HTTP felvezető a különböző alkalmazások (regisztráció azt a web.config fájlt, és beállítod a szerelvényt GAC). Ahhoz, hogy ugyanazt a hatást használja .ashx fájlt, akkor be kell másolni a fájlt .ashx minden virtuális könyvtár.

Létrehozása funkcionális HTTP felvezető

Az előző példában a HTTP felvezető egyszerűen küldje vissza a készüléket a statikus HTML-jelölést. Azonban megengedett létrehozása bonyolultabb processzorok. Például el tudja olvasni az adatokat küldött az oldal által megadott vagy a query string, és használja őket, hogy konfigurálja a generált kimeneti adatokat. Az alábbiakban egy példát feltérképezése forráskódját a kért fájl. Ez használ egy támogató input-output fájlt a System.IO névtér.

Ez a kód egyszerűen megtalálja a kívánt fájlt, beolvassa annak tartalmát, és segítségével a kis csere húrok (például a csere a nem felbontható üres terek és a sortöréseket - elem
) És HTML-kódolás konstrukciók képviselet biztonságosan jelenik meg a böngésző.

Most társult egy felvezető, a fájlok kiterjesztése:

Ezt követően a HTTP felvezető megjeleníti a forráskódját .cs file:

Bővítése a csővezeték http

Készítsen HTTP kezelőjét tartalom eltérő HTML

Néhány a legérdekesebb HTTP kezelők nem generálnak HMTL-tartalma és egyéb típusú tartalmak, például képek. Ez lehetővé teszi, hogy nem támaszkodik a rögzített fájlokat, kivonat vagy létre tartalmat programozottan. Például, akkor olvassa el a tartalmát egy nagy ZIP fájl a rekordok az adatbázisban, és a módszer Response.BinaryWrite (), hogy küldje el az ügyfél.

Akkor is egy lépéssel tovább, és egy dinamikus HTTP felvezető hogy hozzon létre egy ZIP-archívum, amely több kisebb fájlokat. Mindkét esetben az ügyfél a HTTP felvezető, hogy fog kinézni, mintha a böngésző betölt egy normál fájl, holott a tartalom szolgáltatáson keresztül ASP.NET kódot.

Ha az oldal, amely a kép egy másik helyszínen, van egy potenciális problémát. Ez az oldal nem csak ellopja a képet, hanem létrehoz egy újabb terhet a szerveren. Ennek az az oka, hogy ha valaki ránéz a másik oldalon, a kép kérik a szerver. Ha az ellopott kép jelenik meg néhány népszerű weboldalak, akkor egy további, a kiszolgáló terhelése igen magas lehet, és jelentősen csökkenti a rendelkezésre álló sávszélesség szükséges a szolgáltatás saját oldalain.

Ez a probléma - lopás sávszélesség rovására hivatkozásokat, hogy a szerver - informális néven Lichinga (kioldódásának). Ez a fő forrása a „fejfájás” a népszerű webhelyek vendéglátás hatalmas mennyiségű nem HTML-tartalom (például képmegosztó oldalak, mint a Flickr). Sok honlap ellensúlyozza ezt a problémát, ugyanúgy, mint az alábbiakban leírt HTTP felvezető - azaz nem hajlandók kiszolgálni a képet, vagy cserélje ki egy fiktív alak, ha a cím a hivatkozó oldal jelzi, hogy a kérelem érkezik egy másik weboldalon.

Az alábbiakban egy HTTP-kezelőt, amely megvalósítja ezt a megoldást ASP.NET. Ahhoz, hogy ez a kód kell importálni a System.Globalization tér és System.I0 nevek:

Ahhoz, hogy ezt a felvezető védett képfájlokat, akkor regisztrálnia kell a szolgáltatásra vonatkozó fájltípusokat. Mutatja a beállításokat a web.config fájlt, ami alkalmas arra, hogy szolgáltatáskezelőt típusú .gif és .png fájlokat:

A fentiek alapján például, tudjuk gondolni sok más módon használja a HTTP rakodók: például, használja őket, hogy elvegye a különleges képeket különleges kérések az adatbázis, vagy akár, hogy visszatérjen a bináris adatokat. Mindezek a példák meghosszabbítja az ASP.NET architektúra, de megkerülni a weblap modell. Az eredmény egy kompakt és hatékony összetevőket.

Ön is létrehozhat HTTP rakodók futó aszinkron. Ez azt jelenti, hogy annak érdekében, hogy munkájukat, hogy hozzon létre egy új témát, de nem használja az ASP.NET munkavégző szálak. Ez a technika javítja a skálázhatóság olyan helyzetekben, amikor a feladatot el kell végezni, időigényes, de nem igényel több központi feldolgozó egység (CPU) források. A klasszikus példa lenne az elvárás az olvasás néhány nagyon lassú hálózati erőforrás.

A száma munkavégző szálak, amelyek lehet futtatni ASP.NET egyidejűleg rögzített (és jellemzően egyenlő 25). Amikor elérte ezt a határt, a további kérések sorban állnak, még a jelenlétében szabad CPU időt. Mivel a aszinkron felvezető további kérések fogadható el, mivel ezek a gépek által létrehozott minden egyes új áramlási kérelmet, és ne használja a munkafolyamatot.

Természetesen ez a megközelítés jár némi kockázattal: ha létre túl sok szál, vagy amikor megpróbál végrehajtani egyszerre túl sok feladatot, hogy fogyaszt sok CPU erőforrásokat, súlyosan érintette a teljesítménye az egész web szerver.

Kapcsolódó cikkek