نحوه پردازش صفحات ASP.NET بر روی سرويس دهنده وب
ASP.NET پلات فرم مايکروسافت برای طراحی و پياده سازی برنامه های وب در دات نت می باشد . پس از درخواست يک صفحه ASP.NET توسط مرورگر سرويس گيرنده ، پردازش های متعددی بر روی سرويس دهنده وب به منظور ارائه پاسخ لازم ، انجام خواهد شد.شايد تاکنون سوالات مختلفی در رابطه با نحوه پردازش صفحات ASP.NET بر روی سرويس دهنده ، برای شما مطرح شده باشد :
• پس از درخواست يک صفحه ASP.NET ، بر روی سرويس دهنده وب چه اتفاقی می افتد ؟
• نحوه برخورد سرويس دهنده وب با درخواست ارسالی توسط سرويس گيرنده چگونه است ؟
• تگ های HTML چگونه توليد و برای مرورگر ارسال می گردد؟
• و شايد سوالات ديگر!
در اين مقاله قصد داريم با نحوه پردازش صفحات ASP.NET بر روی سرويس دهنده بيشتر آشنا شويم . بديهی است تشريح تمامی مراحل با ذکر جزئيات از حوصله يک مقاله خارج بوده و هدف آشنائی با کليات موضوع با يک روند مشخص و سيستماتيک است .
مرحله اول : ايجاد يک درخواست HTTP برای يک صفحه ASP.NET توسط مرورگر
مرحله دوم : دريافت درخواست HTTP ، توسط سرويس دهنده وب
• انشعاب aspx . ، برای صفحات وب ASP.NET
• انشعاب asmx . ، برای سرويس های وب ASP.NET
• انشعاب config . ، برای فايل های پيکربندی ASP.NET
• انشعاب ashx . ، برای هندلرهای سفارشی ASP.NET HTTP
• انشعاب rem . ، برای منابع راه دور
• و ساير انشعابات ديگر
پس از دريافت درخواست ارسالی توسط سرويس گيرنده ، سرويس دهنده وب آن را در اختيار مسئول مربوطه قرار خواهد داد . مثلا" در صورتيکه درخواست دريافتی مربوط به يک صفحه ASP کلاسيک باشد ، درخواست در اخـتيار asp.dll گذاشته شده و يا در صورتيکه درخواست در ارتباط با يک صفحه ASP.NET باشد ، درخواست در اختيار موتور ASP.NET قرار داده می شود . همانگونه که اشاره گرديد ، معيار اصلی در اين تصميم گيری ، نوع انشعاب فايل درخواست شده توسط سرويس گيرنده می باشد .
مرحله سوم : عملکرد موتور ASP.NET
تعداد زيادی از ماژول های HTTP از قبل ايجاد شده، بصورت پيش فرض در HTTP pipline وجود دارد:
• OutputCache ، مسئوليت برگرداندن و Caching خروجی صفحات HTML در صورت نياز ، برعهده دارد .
• Session ، ماژول فوق ، مسئوليت لود Session state را بر اساس درخواست دريافتی کاربر و روش Session که در فايل Web.config مشخص شده است ، برعهده دارد .
• FormsAuthentication ، ماژول فوق ، مسئوليت تائيد کاربران بر اساس مدل تعريف شده Forms Authentication را در صورت ضرورت برعهده دارد .
• و موارد ديگر
به منظورآشنائی با ماژول های پيش فرض، می توان مقادير نسبت داده شده به عنصر <httpModules> در فايل machine.config را مشاهده نمود. جدول زير مقدار پيش فرض عنصر <httpModules> را نشان می دهد .
machine.Config: httpModules Section |
<httpModules> |
هندلرهای HTTP ، نقطه پايان در ASP.NET HTTP pipeline می باشند . مسئوليت HTTP handler ، توليد خروجی برای منبع درخواست شده است . برای صفحات ASP.NET ، اين به معنی Rendering ، کنترل های وب به HTML و برگرداندن HTML می باشد. برای يک سرويس وب ، مسئوليت فوق ، شامل اجرای متد مشخص شده و Wrapping مقاير برگردانده شده به يک پاسخ مناسب و با فرمت SOAP می باشد . منابع متفاوت ASP.NET از هندلرهای متفاوت HTTP استفاده می نمايند.هندلرهای پيش فرص استفاده شده ، توسط بخش <httpHandlers> فايل machine.config مشخص شده اند. بخش فوق، شامل کلاس هائی است که يا خود HTTP handler بوده و يا HTTP handler factories ، می باشند. يک HTTP handler factory ، صرفا" يک نمونه از يک HTTP handler را پس از فراخوانی ، برمی گرداند . جدول زير ، اطلاعات عنصر <httpHandlers> در فايل machine.config را نشان می دهد .
machine.Config: httpHandlers Section |
<httpHandlers> |
لازم است به اين نکته اشاره گردد که امکان ايجاد HTTP modules و HTTP handler اختصاصی ، توسط طراحان وپياده کنندگان برنامه های وب ASP.NET نيز وجود دارد . پس از ايجاد ماژول ها و هندلرهای HTTP ، می توان آنان را به pipeline ملحق تا برای تمامی سايت های وب موجود بر سرويس دهنده وب ، قابل استفاده گردند. بدين منظور، می توان تغييرات لازم را در فايل machine.config اعمال تا زمينه استفاده از آنان توسط تمامی برنامه های وب فراهم گردد . در اين رابطه می توان تغييرات را در فايل Web.config نيز اعمال نمود، در چنين مواردی امکان استفاده از ماژول ها و هندلرهای HTTP ايجاد شده ، صرفا" برای يک برنامه وب وجود خواهد داشت .
مرحله چهارم : توليد خروجی
سرويس دهنده وب (IIS) پس از دريافت درخواستی برای يک صفحه ASP.NET ( انشعاب فايل aspx.) ، آن را در اختيار موتور ASP.NET ، قرار خواهد داد. درخواست دريافتی در ادامه از بين ماژول ها عبور داده شده تا به PageHandlerFactory برسد ( در بخش <httpHandlers> فايل machin.config که قبلا" mapping آن انجام شده است ) .
machine.Config: httpHandlers Section :PageHandlerFactory |
<httpHandlers> |
کلاس PageHandlerFactory ، يک HTTP handler factory است که وظيفه آن ارائه نمونه ای از يک HTTP handlerبوده که قادر به برخورد مناسب با درخواست ارسالی است.مهمترين رسالت PageHandlerFactory ، يافتن کلاس ترجمه شده ای است که نشاندهنده صفحه ASP.NET درخواستی می باشد. در صورتيکه از ويژوال استوديو دات نت به منظور ايجاد صفحات ASP.NET استفاده می گردد ، صفحات وب از دو فايل جداگانه ( يک فايل با انشعاب aspx . ، شامل صرفا" کنترل های وب و تگ های HTML و يک فايل aspx.vb و يا aspx.cs شامل کلاس code-behind ( کد سمت سرويس دهنده ) ) ، تشکيل می گردند. در صورتيکه از ويژوال استوديو دات نت استفاده نمی گردد ، می توان از يک بلاک سمت سرويس دهنده <Script> استفاده تا کد سمت سرويس دهنده را درخود نگهداری نمايد . صرفنظر از اينکه از کدام رويکرد استفاده می گردد ، زمانيکه صفحه ASP.NET اولين مرتبه و پس از ايجاد تغيير در تگ های HTML و يا محتوی کنترل وب ، مشاهده می گردد ، موتور ASP.NET يک کلاس که مشتق شده از کلاس System.Web.UI.Page می باشد را ايجاد می نمايد . کلاس فوق بصورت اتوماتيک ايجاد و کمپايل می گردد .
Page Class ، عمليات پياده سازی IhttpHandler را انجام خواهد داد. PageHandlerFactory ، در ادامه بررسی لازم در خصوص وجود يک نسخه کمپايل شده از صفحه ASP.NET درخواستی را انجام خواهد داد. در صورتيکه صفحه ترجمه شده وجود نداشته باشد ، PageHandlerFactory آن را بصورت پويا ايجاد و ترجمه خواهد کرد . کلاس فوق ، در ادامه متد خاصی را به منظور توليد HTML ، فرا می خواند . اطلاعات توليد شده به فرمت HTML ، در نهايـت برای سرويس گيرنده ارسال می گردد.وجود تاخير در مشاهده صفحات ASP.NET که بر روی آنان تغييراتی اعمال شده است ( HTML و يا محتوی کنترل وب) ، بدين دليل است که موتور ASP.NET نيازمند ايجاد و ترجمه مجدد کلاس مرتبط با صفحه ASP.NET می باشد.
پس از ايجاد و ترجمه کلاس توسط PageHandlerFactory ، امکان فراخوانی کلاس ايجاد شده به منظور توليد HTML ، فراهم می گردد . فرآيند Rendering که شامل بدست آوردن HTML لازم برای صفحه ASP.NET درخواست شده می باشد از حوصله اين مقاله خارج بوده و می توان در اين رابطه از مقاله The ASP.NET Page Object Model استفاده نمود .
منبع: http://www.4guysfromrolla.com