PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نحوه پردازش صفحات asp.net بر روي سرويس دهنده وب



TAHA
09-23-2009, 08:15 PM
برنامه هاي وب از معماري سرويس گيرنده - سرويس دهنده تبعيت نموده و بر روي سرويس دهنده وب مستقر و مسئوليت پاسخگوئي به درخواست هاي ارسالي توسط سرويس گيرندگان را برعهده خواهند داشت .در سمت سرويس گيرنده ، مرورگر و در سمت سرويس دهنده ، سرويس دهنده وب داراي جايگاهي خاص مي باشند . مرورگر ، ميزبان برنامه وب بوده و مهمترين وظيفه آن ارائه بخش رابط کاربر يک برنامه وب است . در اين راستا ، مرورگر داراي پتانسيل لازم به منظور تفسير و نمايش تگ هاي HTML مي باشد .در سمت سرويس دهنده ، برنامه هاي وب با نظارت و مديريت يک سرويس دهنده وب ( مثلا" IIS ) اجراء مي گردند . سرويس دهنده وب ، مسئوليت مديريت برنامه ، پردازش درخواست هاي ارسالي توسط سرويس گيرندگان و ارائه پاسخ لازم به سرويس گيرندگان را بر عهده دارد .به منظور قانونمند کردن ارسال درخواست سرويس گيرندگان و ارائه پاسخ سرويس دهنده ، مي بايست از يک پروتکل ارتباطي خاص استفاده گردد. پروتکل ، مجموعه اي از قوانين لازم بمنظور تشريح نحوه ارتباط دو و يا چندين آيتم از طريق يک محيط انتقال ( زير ساخت انتقال داده ) نظير اينترنت است . در برنامه هاي وب ( ارسال درخواست توسط سرويس گيرنده و پاسخ به درخواست توسط سرويس دهنده ) از پروتکل ارتباطي HTTP)Hypertext Transport Protocol) ، استفاده مي گردد.
ASP.NET پلات فرم مايکروسافت براي طراحي و پياده سازي برنامه هاي وب در دات نت مي باشد . پس از درخواست يک صفحه ASP.NET توسط مرورگر سرويس گيرنده ، پردازش هاي متعددي بر روي سرويس دهنده وب به منظور ارائه پاسخ لازم ، انجام خواهد شد.شايد تاکنون سوالات مختلفي در رابطه با نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده ، براي شما مطرح شده باشد :

پس از درخواست يک صفحه ASP.NET ، بر روي سرويس دهنده وب چه اتفاقي مي افتد ؟
نحوه برخورد سرويس دهنده وب با درخواست ارسالي توسط سرويس گيرنده چگونه است ؟
تگ هاي HTML چگونه توليد و براي مرورگر ارسال مي گردد؟
و شايد سوالات ديگر!
در اين مقاله قصد داريم با نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده بيشتر آشنا شويم . بديهي است تشريح تمامي مراحل با ذکر جزئيات از حوصله يک مقاله خارج بوده و هدف آشنائي با کليات موضوع با يک روند مشخص و سيستماتيک است .

مرحله اول : ايجاد يک درخواست HTTP براي يک صفحه ASP.NET توسط مرورگر
پردازش با درخواست يک صفحه ASP.NET که توسط مرورگر ايجاد مي شود ، آغاز مي گردد .مثلا" يک کاربر ممکن است در بخش آدرس مرورگر کامپيوتر خود آدرس نحوه پردازش صفحات ASP.NET بر روی سرويس دهنده وب (http://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 قرار داده مي شود . همانگونه که اشاره گرديد ، معيار اصلي در اين تصميم گيري ، نوع انشعاب فايل درخواست شده توسط سرويس گيرنده مي باشد .


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


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

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

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

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

و موارد ديگر

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




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 را پس از فراخواني ، برمي گرداند . جدول زير ، اطلاعات عنصر در فايل 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="*.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 آن انجام شده است ) .




machine.Config: httpHandlers Section http://pnu-club.com/./images/smilies/cofee.gifageHandlerFactory
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG

< httpHandlers >
...
< add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/ >
. ...
< /httpHandlers >


کلاس PageHandlerFactory ، يک HTTP handler factory است که وظيفه آن ارائه نمونه اي از يک HTTP handlerبوده که قادر به برخورد مناسب با درخواست ارسالي است.مهمترين رسالت PageHandlerFactory ، يافتن کلاس ترجمه شده اي است که نشاندهنده صفحه ASP.NET درخواستي مي باشد. در صورتيکه از ويژوال استوديو دات نت به منظور ايجاد صفحات ASP.NET استفاده مي گردد ، صفحات وب از دو فايل جداگانه ( يک فايل با انشعاب aspx . ، شامل صرفا" کنترل هاي وب و تگ هاي HTML و يک فايل aspx.vb و يا aspx.cs شامل کلاس code-behind ( کد سمت سرويس دهنده ) ) ، تشکيل مي گردند. در صورتيکه از ويژوال استوديو دات نت استفاده نمي گردد ، مي توان از يک بلاک سمت سرويس دهنده