HttlHandlers ها در ASP.NET یک روند یا پردازشی می باشد برای پاسخ به در خواستهایی که از سمت یک ASP.NET Web Application فرستاده می شود ، شایعترین Handlers ها در ASP.NET یک Page Handles  می باشند که یک فایل ASPX را Handle می کنند ، زمانی که کاربرها درخواستی را از فایلهای ASPX ارسال می کنند این درخواست که از Page های ASPX ارسال شده است توسط Page Handler رسیدگی می شود .

ASP.NET Page Handler ها فقط یک نوع از Handler ها هستند .

ASP.NET به همراه چند Handler های دیگر درون ساخت ایجاد شده است مانند Web Service Handler که مسئولیت رسیدگی به فایلهای ASMX. را دارد . 

شما می توانید Http Handler های سفارشی خودتان را ایجاد کنید به عنوان مثال میتوانید یک پسوند دلخواه را در Application خودتان پردازش کنید ، ممکن است در بعضی از سایتها دیده باشید که به جای پسوند عکسهای JPG از پسوندهای دلخواهی استفاده شده است مانند WEBJPG و ... هر چه که در مد نظر شماست . چند مثال دیگر :

RSS Feeds : شما می توانید یک Rss Feed را برای وب سایت خود ایجاد کنید ، یک Handler ایجاد کنید که مدیریت می کند RSS-formatted XML . شما می توانید یک پسوند دلخواه مثلا Rss. را به Handler سفارشی خود اختصاص دهید تا زمانی که کاربرها یک درخواست به سایت شما ارسال می کنند که با پسوند Rss. به پایان می رسد ASP.NET بعد از دریافت این درخواست Handler سفارشی شما را برای پردازش این در خواست اجرا خواهد کرد .

Image server : اگر می خواهید Web Application شما دارای یک سرور تصاویر برای تغییر اندازه تصاویر باشد می توانید Handler سفارشی را برای این منظور ایجاد کنید .

Http Handler ها به application context ، application state ، session information و user's identity دسترسی دارد . هنگامی که Http Handler درخواست می شود ASP.NET متد ProcessRequest را در handler شفارشی شما صدا می زند ، این متد وظیفه ارسال Response یا پاسخ بازگشتی به مرورگر را بر عهده دارد .

یک Http Handler می تواند به دو صورت متفاوت باشد ، صورت اول Synchronous یا هم زمان ، صورت دوم Asynchronous یا غیر هم زمان . یک synchronous handler هیچ مقداری را بر نمی گرداند تا زمانی که درخواستی از Http برای آن صدا زده شود . یک asynchronous handler هم یک پردازش مستقلی را اجرا می کند بدون این که در خواستی از کاربرها ارسال شود . asynchronous handler زمانی مفید هستند که می خواهید یک پردازش طولانی مدت را از شروع یک Application انجام دهید .

Http Handler های درون ساخت در ASP.NET

ASP.NET بسته هایی از Http Handler ها را برای برخی پسوند ها فراهم کرده است که در لیست زیر نمایش داده شده است .

Handler  توضیحات

ASP.NET Page Handler (*.aspx)

Http Handle پیش فرض برای همه Page ها در ASP.NEt

Web service handler (*.asmx)

Http Handle پیش فرض برای Web Service Pages ها که توسط ASP.NEt ساخته شده اند .

ASP.NET user control handler (*.ascx)

Http Handle پیش فرض برای همه User Controls ها در ASP.NEt

Trace handler (trace.axd)

 یک Handle که اطلاعات صفحه ای که در حال حاضر نمایش داده می شود را ردیابی می کند .

ساخت یک  HttpHandler سفارشی

برای ساخت یک HttpHandler سفارشی ، ابتدا یک Class ایجاد کنید که اینترفیس IHttpHandler را برای ساخت handler هم زمان پیاده سازی کرده باشد ، برای ساخت یک Handler غیر هم زمان باید اینترفیس IHttpAsyncHandler را پیاده سازی کنید . هر دو اینترفیس نیاز دارد تا پیاده سازی کنید یک Property یا خصیصه  با نام IsReusable و یک متد با نام ProcessRequest
Property یا خصیصه IsReusable مشخص می کند که آبجکت IHttpHandlerFactory می تواند Handler شما را در یک مخزن و محلی قرار دهد و برای افزایش کارایی دوباره از ان استفاده کند یا اینکه در هر زمانی که به این Handler نیاز است یک نمونه جدید از آن را ایجاد کند .
متد ProcessRequest در حقیقت مسئول پردازش تک تک درخواستهای HTTP می باشد .

ایجاد یک پسوند

زمانی که می خواهید یک Class از نوع Http Handler ایجاد کنید ، می توانید یک Handler خودتان را داشته باشید که به هر پسوندی پاسخ دهد که پیش از این در IIS یا در ASP.NET وجود نداشته باشد . به عنوان مثال اگر شما در حال ساختن یک Http Handler برای Rss Feed هستید ، شما می توانید Handler خودتان را به پسوند Rss. پیوند دهید تا ASP.NET بداند کدام Handler باید برای پسوند شما اجرا شود . Handler ی که ایجاد کرده اید باید در IIS یا ASP.NET یا در Application شما پیوند داده شود .

به صورت پیش فرض ASP.NET پسوند هایی را پسوند داده مانند ASHX. برای Costom Httl Handler ها ، به همین صورت پیوند داده پسوند ASPX. برای هندل کردن Page های ASP.NET ، بنابر این اگر شما می خواهید Handler سفارشی خود را بسازید باید با پسوند ASHX. باشد که به صورت خودکار در IIS و ASP.NET پیوند داده می شود .

اگر شما نمی خواهید که از فایل هایی با پسوند ASHX. استفاده کنید باید Class ی که ان را برای Handler پسوند سفارشی خود ایجاد کرده اید را در IIS یا در ASP.NET پیوند دهید . مزیتی که در استفاده نکردن از فایلهای ASHX. وجود دارد این است که زمانی که می خواهید Handler خود را به پسوندی دیگر هم پیوند دهید . به عنوان مثال Handler شما در یک Application باید به درخواست هایی پاسخ دهد که با پسوند Rss. تمام می شوند و در Application ی دیگر باید به درخواستهایی پایخ دهد که با پسوند Feed. به پایان می رسند . یا به عنوان مثال Handler شما باید در یک Application به دو پسوند پاسخ دهد ، اما باید پاسخ هایی متفاوت را برای هر پسوند ایجاد کنید .

Http Handler های غیر هم زمان

Http Handler های غیر هم زمان به شما اجازه می دهد تا یک پردازش خارجی را انجام دهید ، مانند یک متد که وظیفه صدا زدن یک Remote Server را بر عهده دارد ، و سپس بدون وقفه پردازش Handler را برای پردازشی دیگر ادامه دهید تا پایان یابد ، در مدت پردازش یک Http Handler غیر هم زمان ASP.NET قرار می دهد  thread ی را که معمولا استفاده می شوند در یک Thread Pool تا handler یک پاسخ از پردازش خارجی دریافت کند . این می تواند برای بلوکه کردن thread ها و تا حد زیادی به بهبود کارایی برنامه کمک کند زیرا تنها تعداد محدودی از Thread ها می توانند در یک لحظه اجرا شوند .

هنگامی که می خواهید یک Handler از نوع غیر همزمان یا asynchronous ایجاد کنید باید علاوه بر وارد کردن اینترفیس IHttpAsyncHandler باید متد BeginProcessRequest را که وظیفه شروع یک هندل asynchronous و رسیدگی به تک تک درخواستهای Http را دارد وارد کنید و همچنین باید متد EndProcessRequest را هم برای اجرای پاک سازی کدهایی که پایان یافتند اجرا کنید .

کلاس IHttpHandlerFactory سفارشی

IHttpHandlerFactory کلاسی است که درخواستها را دریافت کرده و مسئو.لیت حمل و نقل یک یک درخواست را به یک Http Hanlder مناسب بر عهده دارد ، شما می توانید با وارد کردن اینترفیس IHttpHandlerFactory یک IHttpHandlerFactory سفارشی ایجاد کنید . با ساختن یک handler factory سفارشی می توانید کنترل بهتری به پردازشهای درخواستی یک Handler داشته باشید که توسط بسته های handle های مختلف در زمان اجرا ایجاد می شوند .