PDA

View Full Version : آموزش: آموزش HttpHandler در ASP.NET



habibb
دوشنبه 29 تیر 1394, 12:55 عصر
وقتی کاربر ASP.NET درخواستی برای صفحه‌ای خاص، در آدرس بار مرورگر خودش صادر می‌کند. آن درخواست(httprequest) به صورت اسم صفحه به همراه یک پسوند خاص می‌باشد. که ASP.NET برای پردازش آن نوع فایل(پسوند صفحه) از HttpHandlerی خاص آن نوع پسوند فایل استفاده می‌کند. درخواست رسیده توسط HttpHandler مناسب با پسوند صفحه، پردازش شده و خروجی به صورت HTML به کاربر برمی‌گردد.
مثلا برای درخواست صفحه‌ی Default.aspx که درخواستی از نوع aspx هست ASP.NET از HttpHandlerی به نام System.Web.UI.PageHandlerFactory استفاده می‌کند.
پس PageHandlerFactory برای همه‌ی صفحاتی با پسوندی از نوع aspx.* نتایج را پردازش می کند و HTML نهایی را تولید می‌کند و بر‌می گرداند. این مسیر دریافت درخواست کاربر و ارسال پاسخ برای کاربر توسط HttpHandler به اصطلاح خط لوله یا Pipeline نامیده می‌شود. که در این خط لوله یا Pipeline، اولHTTPModuleها (در صورت وجود) اجرا می‌شوند و بعد HttpHandlerها اجرا می‌شوند.
همه‌ی HttpHandler ها به فایلی به نام applicationHost.config اضافه شدن ولی اگر شما روزی خواستید که یک هندلر برای پسوندی دلخواه بسازید که ASP.NET بتواند آن را پردازش کند، باید اول یک کلاس که از واسط IHttpHandler ارث می‌برد، بسازید. بعد به این کلاس می‌گویند HttpHandler سفارشی. بعد تنها کاری که باید بکنید اینست که HttpHandlerت را به Web.config پروژه اضافه کنی. که تا IIS 6.0 رسم بود که HttpHandler داخل <system.web> به اسم <httpHandlers> اضافه بشود.
ولی از IIS 8.0 - IIS 7.5 - IIS 7.0 به بعد قرار شد که HttpHandler داخل <system.webServer> به اسم <handlers> اضافه بشود.
وقتی IHttpHandler را به کلاس اضافه کردید، باید رویش کلیک کنید تا علامت کشویی آبی رنگ ظاهر بشود. بعد Implement را می‌زنید. تا توابع ProcessRequest و IsReusableاتوماتیک برات ساخته بشود. البته IsReusable باید True برگرداند تا HttpHandler، توی رم بماند و دفعه های بعدی کارت سریعتر بشود ولی می‌توانی falseم بگذاری.
Pipeline(که شامل 2 چیزه، یکی HTTPModule و دیگری HTTPHandler) به صورت پیش فرض تا IIS 6.0 تو مد Classic بود ولی از IIS 8.0 - IIS 7.5 - IIS 7.0 به بعد توی مد Integrated قرار داده شد. کافیه روی نام پروژه در Solution Explorer کلیک کنی تا توی پنجره‌ی Properties آن را ببینی. دیدیش؟ نوشته Managed Pipeline Mode توی مد Integrated.
با تغییر Integrated به Classic این تغییر در فایل vwd.webinfo داخل سلوشن پروژت اتفاق می‌افته. یعنی اگر Classic رو انتخاب کنی True ، useClassicPipelineMode می‌شه. و اگر Integrated رو انتخاب کنی
False ،useClassicPipelineModeمی‌شه. البته ما از این به بعد با Integrated کار داریم. و مد Classic دیگه استفاده نمی‌شه. کاربردهاش اینه که اگر بخوای تمامی تصاویر سایتت کوچک نمایی کنی که به اندازه دلخواه نشون داده بشن یا بخوای تصاویر امنیتی captcha تولید کنی یا نمایش ایمیل به صورت تصویر (برای جلوگیری از جمع آوری ایمیل ها توسط ربات های خزنده یا Web Crawler)، همین‌طور Compress کردن صفحه، گذاشتن آدرس سایت به صورت Watermark روی عکس‌ها، UrlReWriting و....
می‌توانی با Generic HttpHandlerها هم کار کنی، که نوع آماده‌ای از HttpHandlerها هستند، HttpHandlerهادیگه از System.Web.UI.Page ارث نمی گیرن. و بنابراین سریعتر هستند و کدهای HTML اضافی هم ندارن.
<?xml version="1.0"?><!--
Visual Studio global web project settings.
-->
<VisualWebDeveloper>

<iisExpressSettings windowsAuthentication="enabled" anonymousAuthentication="enabled" useClassicPipelineMode="true"/>

</VisualWebDeveloper>

اگر بخوای فایل Pipeline رو ببینی
برای IIS 6.0 به این آدرس برو.C:\Windows\Microsoft.NET\Framework\v4.0.303 19\Config
و فایل web.config رو باز کن.
ولی الان که با VS 2013 کار می‌کنم Pipeline برای IIS 8.0 - IIS 7.5 - IIS 7.0 به بعد
توی این آدرسه. C:\Windows\System32\inetsrv\config
و فایل خط لوله اسمش هست applicationHost.config. آن را باز کن و ببین.
فایدش اینه که می‌توانی ببینی که هر File Type ای با چه HttpHandlerی دارد پردازش می‌شود.
کلاس زیر یک HttpHandlerه که فقط یک متن با قالب HTMLش را برمی‌گرداند.
using System;using System.Web;

public class SimpleHandler : IHttpHandler
{
public void ProcessRequest(System.Web.HttpContext context)
{
HttpResponse response = context.Response;
//HttpRequest request = context.Request;

response.Write("<html><body><h1>Rendered by the SimpleHandler</h1></body></html>");
}
public bool IsReusable
{
get { return true; }
}
}
در فایل Web.config هم این کد رو اضافه می‌کنی تا HttpHandlerت در زمان اجرا به Pipelineت اضافه بشود.
</system.web> <system.webServer>
<handlers>
<add name="SimpleHandler" verb="*" path="test.simple" type="SimpleHandler"/>
</handlers>
</system.webServer>
حالا هر فایلی که در Address Bar مرورگرت با پسوند simple.* تمام بشود. این متن نشان داده می‌شود. حتی اگر آن فایل وجود نداشته باشد باز هم کار می‌کند. برای مثال آدرس زیر را اجرا کنید.
http://localhost:6087/test.simple که خروجیش می‌شود این:
Rendered by the SimpleHandler

Pipeline - آموزش HttpHandler در ASP.NET ایجاد یک راه انداز شخصی با پیکربندی در Web.config (http://substantialmotion.ir/ShowNew.aspx?NID=60)


دانلود و نصب ویزیویگ CKEditor و CKFinder برای ASP.NET (فعال نمودن آپلود عکس) (http://barnamenevis.org/showthread.php?478188-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%88-%D9%86%D8%B5%D8%A8-%D9%88%DB%8C%D8%B2%DB%8C%D9%88%DB%8C%DA%AF-CKEditor-%D9%88-CKFinder-%D8%A8%D8%B1%D8%A7%DB%8C-ASP-NET-(%D9%81%D8%B9%D8%A7%D9%84-%D9%86%D9%85%D9%88%D8%AF%D9%86-%D8%A2%D9%BE%D9%84%D9%88%D8%AF-%D8%B9%DA%A9%D8%B3))

چطور اضافه کردن ویژگی SyntaxHighLighting در CKEditor برای ASP.NET با Syntaxhighlighter Interface (http://barnamenevis.org/showthread.php?478260-%DA%86%D8%B7%D9%88%D8%B1-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D9%88%DB%8C%DA%98%DA%AF%DB%8C-SyntaxHighLighting-%D8%AF%D8%B1-CKEditor-%D8%A8%D8%B1%D8%A7%DB%8C-ASP-NET-%D8%A8%D8%A7-Syntaxhighlighter-Interface)
از طرف حرکت جوهری (http://substantialmotion.ir/) برنامه نویس فوق حرفه ای (http://substantialmotion.ir/)http://www.forum.98ia.com/images/smilies/2/-2-32-.gif