ПредишенСледващото

конвейер събитие кандидатстване не се ограничава до заявки за уеб форми .aspx. Той се използва също и в случай, ако има специални процесори, които обслужват определени типове файлове.

Защо може да се наложи да създадете потребителски манипулатор? В повечето случаи това не е необходимо. Въпреки това, понякога все още удобно да има интерфейс с ниско ниво, което все още се осигурява достъп до полезни предмети като отговор и запитване, но не и целия модел с помощта на уеб форма с много контроли.

Pluggable архитектура на ASP.NET позволява да се прилагат такива сценарии е удивително проста. Например, новите манипулатори за специфични типове файлове можете да "свърже", просто чрез добавяне на съответните параметри на конфигурацията. Въпреки това, първо трябва да се справят с факта как тръбопровода HTTP.

HTTP товарачи

Всеки влизане заявка за приложение ASP.NET се обработва, специално проектиран за този компонент, който се нарича HTTP манипулатор (HTTP манипулатор). HTTP товарачи играят важна роля в ASP.NET заявка структура. За файл, обслужващи различни видове HTTP товарачи се използват в ASP.NET. Например, за вашия уеб страници използват манипулатор, който създава обекти на страницата и контролите му, изпълнява кода и прави окончателен HTML.

Регистрирайте HTTP, работещи с по два начина. Ако използвате вградената Visual Studio уеб сървър, по-стара версия на IIS версия или IIS 7.x в класически режим, HTTP, работещи с които да се добавят към раздела елемент във вътрешността на файла web.config. По-долу е това място:

вътре в този раздел Можете да поставите елементи да се регистрират новите манипулатори и елементи да отмени регистрацията на съществуващите процесори. Ключов набор от специфични манипулатор по подобен начин може да се види във файла с корен web.config. По-долу показва извадка от този файл:

При използване на IIS 7.x в интегриран режим (режим по подразбиране), по-горе описания метод регистрация манипулатор HTTP не работи. В тази ситуация, IIS чете раздела и използва манипулатори, определени в нейния подраздел :

като раздел , новите манипулатори HTTP са регистрирани чрез добавяне на елементи раздел . Това е малка промяна в конфигурационния файл подчертава по-сериозна промяна в метода IIS работа. В версии на предходната IIS 7 (в случая на старт IIS 7.x в класически режим), при получаване на всяка заявка първите проверки, с които исканата програма е свързана тип файл. Ако типът на файл е свързано с ASP.NET, IIS на ASP.NET преминава механизма за файл, който след това се чете информацията, свързана с отговорниците на файла web.config и решава какво да прави с това искане.

Недостатък на този подход е, че целият процес зависи от първоначалната регистрация файла. Ако механизъм ASP.NET не е регистриран за определен тип файл, специален манипулатор или HTTP модул няма да започне, когато заявите файл от този тип.

IIS 7.x версия е по-интелигентна. В интегриран режим, той е до задачата за изпращане на заявка за правилното HTTP манипулатор и винаги чете информацията от раздела за товарачи . Ако се опитате да се регистрирате раздела за товарачи , тогава, когато започнете страница на приложението ще се появи с IIS грешка. Това е за да се предотврати риск за сигурността, защото на уеб-базирани приложения, в които се изпълняват определени товарачи, но всъщност не се използват. (Добавяне на секция елемент . това поведение може да бъде изключен, а след това 7.x на IIS ще вземе участие . Въпреки това, не действа по този начин, се препоръчва.)

Създаване на потребителски HTTP манипулатор

Ако искате да работите по-ниско ниво, отколкото моделът предлага уеб формуляри, за да се осигури специален вид лечение, може да се приложи по поръчка HTTP манипулатор.

За да създадете персонализирано HTTP манипулатор, трябва само да създадете клас, който реализира интерфейса IHttpHandler. Този клас може да се постави в директорията на APP_CODE или съставен в рамките на самостоятелен DLL-монтаж (с други думи, в отделен проект библиотека клас) и да ги добавите в уеб приложение връзка към него.

IHttpHandler интерфейс изисква прилагането на двама членове на класа:

ASP.NET нарича този метод, когато бъдете подканени. Той е тук, HTTP, работещи свърши цялата работа. Достъп до вътрешните обекти ASP.NET (като Искане, Response, както и сървър) може по HttpContext обект предава на този метод

След метод ProcessRequest (), за да си свърши работата, проверки ASP.NET за този имот, за да се види дали това може да бъде пример за HTTP манипулатор използва повторно. Стойността вярно показва, че обектът на HTTP манипулатор може да се използва отново за друго искане от същия тип и стойност на фалшива - HTTP манипулатор обект, който трябва да бъде изхвърлен

Следното е пример за създаване на прост HTTP манипулатор. Той просто се връща фиксиран блок HTML-маркиране с посланието:

Ако създадете разширение като проект за клас библиотека, ще трябва да се добави позоваване на System.Web.dll монтаж съдържащ голям брой класове на ASP.NET. Без тази връзка, не можете да използвате тези типове като IHttpHandler и HttpContext.

Конфигуриране на потребителски HTTP манипулатор

След манипулатор класа на HTTP е създаден и е на разположение на уеб приложението (като го поставите в директорията на APP_CODE, или да добавите връзки), разширяването е готова за използване. Следващата стъпка е да се промени web.config файла за приложението Уеб да се регистрирате HTTP манипулатор. Един пример е показано по-долу:

При регистриране, работещи с HTTP, посочени три важни части. Verb атрибут определя типа на HTTP заявка - POST или GET (* се използва за всички видове заявки). Умение път показва файловите разширения, които ще доведат до HTTP манипулатор. В този пример, частта от web.config свързва SimpleHandler клас, наречен test.simple файл.

И накрая, тип атрибут определя класа на HTTP манипулатор. Тази идентификация се състои от две части. Първата част е напълно определено име на класа (в този пример - HttpExtensions.SimpleHandler). За тази част, последвано от запетая и името на монтаж DLL-файл, съдържащ клас (в този пример - HttpExtensions.dll). Моля, имайте предвид, че разширяването .dll винаги се разбира, така че не е необходимо да се посочи.

Ако използвате APP_CODE подход вместо отделно съставен монтаж, можете дори да разкрие името на DLL-файла, защото ASP.NET ще генерира автоматично.

Разширяване на тръбопровода HTTP

Използването на манипулатори на HTTP, не е необходимо да бъде конфигуриран

В ASP.NET също подкрепи алтернативен подход, който избягва да се регистрирате HTTP манипулатори и не се тревожи за това как да конфигурирате настройките им в конфигурационния файл - Използвайте признато разширение .ashx. Който и вариант на IIS не се използва (дори интегриран Visual Studio уеб сървър), всички искания, завършващи .ashx разширение, се третират като автоматично заявки, обслужвани от специално HTTP манипулатор.

За да създадете .ashx файл във Visual Studio, изберете менюто в сайта (уебсайта) (или от менюто Project (Проект) за уеб проекта) т Добавяне на нов елемент (Добавяне на нов елемент) и посочете Generic манипулатор (General манипулатор). След това въведете името на подходящия и след това щракнете върху Add (Добавяне), за да се създаде манипулатор.

.ashx файл започва с директива WebHandler. Тази директива показва класата, която следва да бъде предоставена чрез файла. Например:

Името на класа може да съответства на класа в директорията на APP_CODE или класа в сглобяването връзка. Освен това, можете да дефинирате клас директно в .ashx файл (съгласно Директива WebHandler). Във всеки случай, когато потребителят поиска файл .ashx съответния клас HTTP манипулатор се изпълнява. Ако запазите предишния пример под формата на simple.ashx файл, след което всеки път, когато даден клиент заявка simple.ashx стартира и специална уеб-манипулатор. Освен това, .ashx тип файл е регистрирано в IIS, така че не е необходимо конфигурацията на IIS, ако приложението се разполага.

Използвайте конфигурационния файл или файл .ashx - въпрос на лично предпочитание. Въпреки .ashx файлове обикновено се използват за повече от прости разширения, които са предназначени за едно уеб приложение. Конфигурационни файлове също осигуряват известна степен на гъвкавост. Например, можете да се регистрирате от HTTP манипулатор за работа с въпроси, завършваща с това разширение, а .ashx файл ще обслужи заявката с конкретно име на файла.

Можете също така да се регистрирате за HTTP манипулатор за различни приложения (това се регистрират във файла web.config и определяне на събранието в GAC). За да се постигне същия ефект, като се използва .ashx файл, трябва да копирате .ashx файла във всяка виртуална директория.

Създаване на функционален HTTP манипулатор

В предишния пример, HTTP манипулатор просто връщане на единица статичен HTML-маркиране. Въпреки това, допустимо да се създаде по-сложни процесори. Например, можете да прочетете на данните, изпратени от страницата или посочени в низа на заявката, и да ги използвате, за да изберете генерират изходни данни. По-долу е пример за картографиране на изходния код за искания файл. Той използва подкрепа входно-изходния файл от пространството от имена System.IO.

Този код просто намери желания файл, чете съдържанието му, и чрез използването на малки заменящи низове (например замяната на не-делими празно пространство интервали или нови редове - елемент
) И HTML кодиране конструкции представителство безопасно показват в браузъра.

Сега можете да свържете манипулатор с разширението на файла:

След този HTTP манипулатор показва изходния код на файла с .cs:

Разширяване на тръбопровода HTTP

Създаване на HTTP манипулатор за съдържание, различно от HTML

Някои от най-интересните HTTP Манипулатори не генерират HMTL-съдържание и други видове съдържание, като например изображения. Това дава възможност да не разчита на фиксирани файлове, извличане или генериране на съдържание по програмен път. Например, можете да прочетете съдържанието на голям ZIP-файл на записите в базата данни и с помощта на метод Response.BinaryWrite (), за да го изпратите на клиента.

Можете дори да се движат с една крачка напред и да се изгради динамична HTTP манипулатор, за да създадете ZIP-архив, състоящ се от няколко по-малки файлове. И в двата случая на клиента посредством HTTP манипулатор, тя ще изглежда така, сякаш браузърът зарежда с обикновен файл, когато в действителност съдържанието се показват чрез ASP.NET код.

Ако страницата, която използва изображението е на друго място, има потенциален проблем. Тази страница не само краде вашия имидж, но и създава допълнителна тежест на вашия сървър. Причината е, че всеки път, когато някой гледа този друг сайт, изображението се изисква от вашия сървър. Ако откраднат образ се появява на някои популярни сайтове, а след това допълнително натоварване на сървъра може да бъде много висока и значително намаляване на тяхната пропускателна способност, необходима за обслужването собствените си страници.

Този проблем - кражба на трафик за сметка на линкове към ресурси на вашия сървър - неофициално наречена Lichinga (теглят). Това е основният източник на "главоболие" за популярни сайтове кетъринг за огромни количества не-HTML съдържание (като например споделяне на снимки сайтове като Flickr). Много уебсайтове противодействие на този проблем по същия начин, както е описано по-долу HTTP манипулатор, а именно - да откаже да служи на изображението или да го замени с фиктивна фигура, ако заглавието на препращащата страница показва, че искането идва от друг уеб сайт.

По-долу е HTTP манипулатор, който реализира това решение в ASP.NET. За да работите с този код, ще трябва да внасят пространството System.Globalization и имената System.I0:

Към този манипулатор защитени файлове с изображения, тя ще трябва да се регистрират за услугата съответните файлови типове. По-долу са показани настройките във файла web.config, която е пригодена за обслужване тип манипулатор .gif и .png файлове:

Въз основа на горния пример, можем да мислим за много други начини за използване на манипулаторите на HTTP: например, да ги използвате, за да направи специални изображения за специални заявки към базата данни, или дори да се върне на двоични данни. Всички тези примери да удължат ASP.NET архитектура, но заобикалят модел уеб страница. Резултатът е по-компактни и ефективни компоненти.

Можете също да създадете HTTP товарачи работи асинхронно. Това означава, че за да си вършат работата, те създават нова тема, но не използвайте една от нишките на работници ASP.NET. Тази техника се подобрява скалируемостта в ситуации, когато задачата е да се извърши, отнема много време, но не изисква множество централен процесор (CPU) ресурси. Един класически пример ще бъде очакването за четене някои много бавно мрежовите ресурси.

Броят на работниците теми, които могат да се изпълняват в ASP.NET едновременно е фиксирана (и обикновено равна на 25). При достигане на този лимит, допълнителни искания, те се записват, дори и при наличие на свободно време на процесора. Благодарение на асинхронен манипулатор, допълнителни искания ще бъдат приети, тъй като тези, работещи са създадени за всяка нова заявка поток, и не използват работен процес.

Разбира се, този подход е свързано с известен риск: когато създавате прекалено много теми, или когато се опитват да се изпълни едновременно прекалено много задачи, които консумират много процесорни ресурси, сериозно влияе върху качеството на цялата уеб сървъра.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!