وب سایت فنی مهندسی داینامیک

نحوه پردازش صفحات 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://www.4guysfromrolla.com

تعداد زيادی از ماژول های 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 آن انجام شده است ) .

machine.Config: httpHandlers Section :PageHandlerFactory
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 ( کد سمت سرويس دهنده ) ) ، تشکيل می گردند. در صورتيکه از ويژوال استوديو دات نت استفاده نمی گردد ، می توان از يک بلاک سمت سرويس دهنده <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 می باشد.



منبع : http://www.4guysfromrolla.com

پس از ايجاد و ترجمه کلاس توسط PageHandlerFactory ، امکان فراخوانی کلاس ايجاد شده به منظور توليد HTML ، فراهم می گردد . فرآيند Rendering که شامل بدست آوردن HTML لازم برای صفحه ASP.NET درخواست شده می باشد از حوصله اين مقاله خارج بوده و می توان در اين رابطه از مقاله The ASP.NET Page Object Model استفاده نمود .
 
لینک منبع : srco.ir

نظر به مطلب
نام:  
ایمیل:
متن:  500 حرف دیگر میتوانید تایپ کنید
کد امنیتی: 37334
   
چهارشنبه 29 شهریور 1396
جستجو در مطالب

قدرت گرفته از پرتال ترنم