نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده وب
برنامه های وب از معماری سرویس گیرنده – سرویس دهنده تبعیت نموده و بر روی سرویس دهنده وب مستقر و مسئولیت پاسخگوئی به درخواست های ارسالی توسط سرویس گیرندگان را برعهده خواهند داشت .در سمت سرویس گیرنده ، مرورگر و در سمت سرویس دهنده ، سرویس دهنده وب دارای جایگاهی خاص می باشند . مرورگر ، میزبان برنامه وب بوده و مهمترین وظیفه آن ارائه بخش رابط کاربر یک برنامه وب است . در این راستا ، مرورگر دارای پتانسیل لازم به منظور تفسیر و نمایش تگ های HTML می باشد .در سمت سرویس دهنده ، برنامه های وب با نظارت و مدیریت یک سرویس دهنده وب ( مثلا” IIS ) اجراء می گردند . سرویس دهنده وب ، مسئولیت مدیریت برنامه ، پردازش درخواست های ارسالی توسط سرویس گیرندگان و ارائه پاسخ لازم به سرویس گیرندگان را بر عهده دارد .به منظور قانونمند کردن ارسال درخواست سرویس گیرندگان و ارائه پاسخ سرویس دهنده ، می بایست از یک پروتکل ارتباطی خاص استفاده گردد. پروتکل ، مجموعه ای از قوانین لازم بمنظور تشریح نحوه ارتباط دو و یا چندین آیتم از طریق یک محیط انتقال ( زیر ساخت انتقال داده ) نظیر اینترنت است . در برنامه های وب ( ارسال درخواست توسط سرویس گیرنده و پاسخ به درخواست توسط سرویس دهنده ) از پروتکل ارتباطی HTTP)Hypertext Transport Protocol) ، استفاده می گردد.
ASP.NET پلات فرم مایکروسافت برای طراحی و پیاده سازی برنامه های وب در دات نت می باشد . پس از درخواست یک صفحه ASP.NET توسط مرورگر سرویس گیرنده ، پردازش های متعددی بر روی سرویس دهنده وب به منظور ارائه پاسخ لازم ، انجام خواهد شد
پس از درخواست یک صفحه ASP.NET ، بر روی سرویس دهنده وب چه اتفاقی می افتد ؟
نحوه برخورد سرویس دهنده وب با درخواست ارسالی توسط سرویس گیرنده چگونه است ؟
تگ های HTML چگونه تولید و برای مرورگر ارسال می گردد؟
و شاید سوالات دیگر!

مرحله اول : ایجاد یک درخواست HTTP برای یک صفحه ASP.NET توسط مرورگر
مرحله دوم : دریافت درخواست HTTP ، توسط سرویس دهنده وب

مهمترین وظیفه سرویس دهنده وب ، دریافت درخواست ارسالی HTTP و ارائه منبع درخواست شده درقالب یک پاسخ HTTP است . سرویس دهنده وب ( مثلا” IIS ) ، پس از دریافت درخواست ارسال شده توسط سرویس گیرنده ، تصمیم لازم در رابطه با نحوه برخورد با آن را اتخاذ می نماید. محور تصمیم گیری فوق بر پایه نوع انشعاب فایل درخواستی استوار می باشد. مثلا” در صورتیکه فایل درخواستی دارای انشعاب asp. ، باشد ، IIS درخواست را به سمت asp.dll هدایت تا عملیات مرتبط با آن انجام شود . انشعابات فایل متعددی به موتور ASP.NET ، مپ می گردند . برخی از آنان شامل موارد زیر می باشد :

انشعاب aspx . ، برای صفحات وب ASP.NET
انشعاب asmx . ، برای سرویس های وب ASP.NET
انشعاب config . ، برای فایل های پیکربندی ASP.NET
انشعاب ashx . ، برای هندلرهای سفارشی ASP.NET HTTP
انشعاب rem . ، برای منابع راه دور
و سایر انشعابات دیگر

ee

پس از دریافت درخواست ارسالی توسط سرویس گیرنده ، سرویس دهنده وب آن را در اختیار مسئول مربوطه قرار خواهد داد . مثلا” در صورتیکه درخواست دریافتی مربوط به یک صفحه ASP کلاسیک باشد ، درخواست در اخـتیار asp.dll گذاشته شده و یا در صورتیکه درخواست در ارتباط با یک صفحه ASP.NET باشد ، درخواست در اختیار موتور ASP.NET قرار داده می شود . همانگونه که اشاره گردید ، معیار اصلی در این تصمیم گیری ، نوع انشعاب فایل درخواست شده توسط سرویس گیرنده می باشد . شکل زیر مراحل اول و دوم اشاره شده را نشان می دهد .

htt

مرحله سوم : عملکرد موتور ASP.NET
پس از درخواست یک صفحه ASP.NET توسط سرویس گیرنده و دریافت آن توسط سرویس دهنده وب ، درخواست دریافتی در اختیار موتور ASP.NET قرار داده می شود . از موتور ASP.NET ، اغلب با نام ASP.NET HTTP pipeline یاد می گردد. علت نامگذاری فوق ، بدین دلیل است که درخواست دریافتی از بین تعداد متغیری از HTTP modules در بین مسیر خود برای رسیدن به یک HTTP handler عبور می نماید . HTTP modules ، کلاس هائی می باشند که امکان دستیابی به درخواست دریافتی را دارا می باشند. این ماژول ها قادر به بازبینی و بررسی درخواست دریافتی و اتخاد تصمیماتی می باشند که مستقیما” بر نحوه گردش داخلی ( روند برخورد با درخواست ) تاثیر خواهد گذاشت . درخواست دریافتی پس از عبور از ماژول های مسخص شده HTTP ، به یک HTTP Handler خواهد رسید . HTTP Handler مسئولیت ایجاد خروجی لازم به منظور ارسال برای مرورگر متقاصی ( ارسال کننده درخواست ) را برعهده دارد. شکل زیر ، pipline یک درخواست ASP.NET را نشان می دهد .

aa

تعداد زیادی از ماژول های HTTP از قبل ایجاد شده، بصورت پیش فرض در HTTP pipline وجود دارد:

OutputCache ، مسئولیت برگرداندن و Caching خروجی صفحات HTML در صورت نیاز ، برعهده دارد .

Session ، ماژول فوق ، مسئولیت لود Session state را بر اساس درخواست دریافتی کاربر و روش Session که در فایل Web.config مشخص شده است ، برعهده دارد .

FormsAuthentication ، ماژول فوق ، مسئولیت تائید کاربران بر اساس مدل تعریف شده Forms Authentication را در صورت ضرورت برعهده دارد .

و موارد دیگر

به منظورآشنائی با ماژول های پیش فرض، می توان مقادیر نسبت داده شده به عنصر <httpModules> در فایل machine.config را مشاهده نمود. جدول زیر مقدار پیش فرض عنصر <httpModules> را نشان می دهد .

bb

هندلرهای 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 را نشان می دهد .

lp

 

نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده وب
برنامه های وب از معماری سرویس گیرنده – سرویس دهنده تبعیت نموده و بر روی سرویس دهنده وب مستقر و مسئولیت پاسخگوئی به درخواست های ارسالی توسط سرویس گیرندگان را برعهده خواهند داشت .در سمت سرویس گیرنده ، مرورگر و در سمت سرویس دهنده ، سرویس دهنده وب دارای جایگاهی خاص می باشند . مرورگر ، میزبان برنامه وب بوده و مهمترین وظیفه آن ارائه بخش رابط کاربر یک برنامه وب است . در این راستا ، مرورگر دارای پتانسیل لازم به منظور تفسیر و نمایش تگ های HTML می باشد .در سمت سرویس دهنده ، برنامه های وب با نظارت و مدیریت یک سرویس دهنده وب ( مثلا” IIS ) اجراء می گردند . سرویس دهنده وب ، مسئولیت مدیریت برنامه ، پردازش درخواست های ارسالی توسط سرویس گیرندگان و ارائه پاسخ لازم به سرویس گیرندگان را بر عهده دارد .به منظور قانونمند کردن ارسال درخواست سرویس گیرندگان و ارائه پاسخ سرویس دهنده ، می بایست از یک پروتکل ارتباطی خاص استفاده گردد. پروتکل ، مجموعه ای از قوانین لازم بمنظور تشریح نحوه ارتباط دو و یا چندین آیتم از طریق یک محیط انتقال ( زیر ساخت انتقال داده ) نظیر اینترنت است . در برنامه های وب ( ارسال درخواست توسط سرویس گیرنده و پاسخ به درخواست توسط سرویس دهنده ) از پروتکل ارتباطی HTTP)Hypertext Transport Protocol) ، استفاده می گردد.
ASP.NET پلات فرم مایکروسافت برای طراحی و پیاده سازی برنامه های وب در دات نت می باشد . پس از درخواست یک صفحه ASP.NET توسط مرورگر سرویس گیرنده ، پردازش های متعددی بر روی سرویس دهنده وب به منظور ارائه پاسخ لازم ، انجام خواهد شد.شاید تاکنون سوالات مختلفی در رابطه با نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده ، برای شما مطرح شده باشد :

پس از درخواست یک صفحه ASP.NET ، بر روی سرویس دهنده وب چه اتفاقی می افتد ؟
نحوه برخورد سرویس دهنده وب با درخواست ارسالی توسط سرویس گیرنده چگونه است ؟
تگ های HTML چگونه تولید و برای مرورگر ارسال می گردد؟
و شاید سوالات دیگر!

در این مقاله قصد داریم با نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده بیشتر آشنا شویم . بدیهی است تشریح تمامی مراحل با ذکر جزئیات از حوصله یک مقاله خارج بوده و هدف آشنائی با کلیات موضوع با یک روند مشخص و سیستماتیک است .

مرحله اول : ایجاد یک درخواست HTTP برای یک صفحه ASP.NET توسط مرورگر
پردازش با درخواست یک صفحه ASP.NET که توسط مرورگر ایجاد می شود ، آغاز می گردد .مثلا” یک کاربر ممکن است در بخش آدرس مرورگر کامپیوتر خود آدرس www.srco.ir//Articles/DocView.asp?ID=210 را به منظور دریافت این مقاله وارد نماید . مرورگر در ادامه یک درخواست HTTP را از سرویس دهنده وب محل استقرار سایت Srco.ir ایجاد و درخواست فایل حاوی مقاله را می نماید .

مرحله دوم : دریافت درخواست HTTP ، توسط سرویس دهنده وب
مهمترین وظیفه سرویس دهنده وب ، دریافت درخواست ارسالی HTTP و ارائه منبع درخواست شده درقالب یک پاسخ HTTP است . سرویس دهنده وب ( مثلا” IIS ) ، پس از دریافت درخواست ارسال شده توسط سرویس گیرنده ، تصمیم لازم در رابطه با نحوه برخورد با آن را اتخاذ می نماید. محور تصمیم گیری فوق بر پایه نوع انشعاب فایل درخواستی استوار می باشد. مثلا” در صورتیکه فایل درخواستی دارای انشعاب asp. ، باشد ، IIS درخواست را به سمت asp.dll هدایت تا عملیات مرتبط با آن انجام شود . انشعابات فایل متعددی به موتور ASP.NET ، مپ می گردند . برخی از آنان شامل موارد زیر می باشد :

انشعاب aspx . ، برای صفحات وب ASP.NET
انشعاب asmx . ، برای سرویس های وب ASP.NET
انشعاب config . ، برای فایل های پیکربندی ASP.NET
انشعاب ashx . ، برای هندلرهای سفارشی ASP.NET HTTP
انشعاب rem . ، برای منابع راه دور
و سایر انشعابات دیگر

پس از دریافت درخواست ارسالی توسط سرویس گیرنده ، سرویس دهنده وب آن را در اختیار مسئول مربوطه قرار خواهد داد . مثلا” در صورتیکه درخواست دریافتی مربوط به یک صفحه ASP کلاسیک باشد ، درخواست در اخـتیار asp.dll گذاشته شده و یا در صورتیکه درخواست در ارتباط با یک صفحه ASP.NET باشد ، درخواست در اختیار موتور ASP.NET قرار داده می شود . همانگونه که اشاره گردید ، معیار اصلی در این تصمیم گیری ، نوع انشعاب فایل درخواست شده توسط سرویس گیرنده می باشد . شکل زیر مراحل اول و دوم اشاره شده را نشان می دهد .
منبع : http://www.4guysfromrolla.com

مرحله سوم : عملکرد موتور ASP.NET
پس از درخواست یک صفحه ASP.NET توسط سرویس گیرنده و دریافت آن توسط سرویس دهنده وب ، درخواست دریافتی در اختیار موتور ASP.NET قرار داده می شود . از موتور ASP.NET ، اغلب با نام ASP.NET HTTP pipeline یاد می گردد. علت نامگذاری فوق ، بدین دلیل است که درخواست دریافتی از بین تعداد متغیری از HTTP modules در بین مسیر خود برای رسیدن به یک HTTP handler عبور می نماید . HTTP modules ، کلاس هائی می باشند که امکان دستیابی به درخواست دریافتی را دارا می باشند. این ماژول ها قادر به بازبینی و بررسی درخواست دریافتی و اتخاد تصمیماتی می باشند که مستقیما” بر نحوه گردش داخلی ( روند برخورد با درخواست ) تاثیر خواهد گذاشت . درخواست دریافتی پس از عبور از ماژول های مسخص شده HTTP ، به یک HTTP Handler خواهد رسید . HTTP Handler مسئولیت ایجاد خروجی لازم به منظور ارسال برای مرورگر متقاصی ( ارسال کننده درخواست ) را برعهده دارد. شکل زیر ، pipline یک درخواست 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
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG

<httpModules>
<add name=”OutputCache” type=”System.Web.Caching.OutputCacheModule”/>
<add name=”Session” type=”System.Web.SessionState.SessionStateModule”/>
<add name=”WindowsAuthentication” type=”System.Web.Security.WindowsAuthenticationModule”/>
<add name=”FormsAuthentication” type=”System.Web.Security.FormsAuthenticationModule”/>
<add name=”PassportAuthentication” type=”System.Web.Security.PassportAuthenticationModule”/>
<add name=”UrlAuthorization” type=”System.Web.Security.UrlAuthorizationModule”/>
<add name=”FileAuthorization” type=”System.Web.Security.FileAuthorizationModule”/>
<add name=”ErrorHandlerModule” type=”System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”/>
</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
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG

<httpHandlers>
<add verb=”*” path=”trace.axd” type=”System.Web.Handlers.TraceHandler”/>
<add verb=”*” path=”*.aspx” type=”System.Web.UI.PageHandlerFactory”/>
<add verb=”*” path=”*.ashx” type=”System.Web.UI.SimpleHandlerFactory”/>
. …
<add verb=”*” path=”*.resources” type=”System.Web.HttpForbiddenHandler”/>
<add verb=”GET,HEAD” path=”*” type=”System.Web.StaticFileHandler”/>
<add verb=”*” path=”*” type=”System.Web.HttpMethodNotAllowedHandler”/>
</httpHandlers>

لازم است به این نکته اشاره گردد که امکان ایجاد HTTP modules و HTTP handler اختصاصی ، توسط طراحان وپیاده کنندگان برنامه های وب ASP.NET نیز وجود دارد . پس از ایجاد ماژول ها و هندلرهای HTTP ، می توان آنان را به pipeline ملحق تا برای تمامی سایت های وب موجود بر سرویس دهنده وب ، قابل استفاده گردند. بدین منظور، می توان تغییرات لازم را در فایل machine.config اعمال تا زمینه استفاده از آنان توسط تمامی برنامه های وب فراهم گردد . در این رابطه می توان تغییرات را در فایل Web.config نیز اعمال نمود، در چنین مواردی امکان استفاده از ماژول ها و هندلرهای HTTP ایجاد شده ، صرفا” برای یک برنامه وب وجود خواهد داشت .

مرحله چهارم : تولید خروجی
آخرین مرحله درارتباط با پردازش یک صفحه ASP.NET بر روی سرویس دهنده وب ، شامل ایجاد خروجی مناسب است . خروجی فوق ، در ادامه از طریق ماژول های HTTP عبور داده شده تا مجددا” به IIS برسد . در نهایت IIS ، خروجی تولید شده را برای سرویس گیرنده متقاصی ارسال می نماید .مراحل لازم به منظور تولید خروجی با توجه به HTTP handler متفاوت بوده و در ادامه صرفا” یک حالت خاص آن را بررسی می نمائیم ( هندلر HTTP که از آن به منظور rendering صفحات ASP.NET استفاده می گردد).
سرویس دهنده وب (IIS) پس از دریافت درخواستی برای یک صفحه ASP.NET ( انشعاب فایل aspx.) ، آن را در اختیار موتور ASP.NET ، قرار خواهد داد. درخواست دریافتی در ادامه از بین ماژول ها عبور داده شده تا به PageHandlerFactory برسد ( در بخش <httpHandlers> فایل machin.config که قبلا” mapping آن انجام شده است ) .

path

کلاس 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 می باشد.

oe

س از ایجاد و ترجمه کلاس توسط PageHandlerFactory ، امکان فراخوانی کلاس ایجاد شده به منظور تولید HTML ، فراهم می گردد . فرآیند Rendering که شامل بدست آوردن HTML لازم برای صفحه ASP.NET درخواست شده می باشد