فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 
سه شنبه 24 اسفند 1389 :: نویسنده : ارش کاکاوند

در این بخش با application state آشنا می شویم .

با استفاده از application state می توان اشیاء سراسری ( global )  را با هدف دستیابی توسط هر یك از سرویس گیرندگان ذخیره كرد . عملكرد application state بر اساس كلاس  System.Web.HttpApplicationState می باشد  كه بطور پیش فرض از طریق شی از قبل تعبیه شده Application در تمامی صفحات قابل استفاده است .
طرز كار application state مشابه session state است و  از اشیائی با نوع های مشابه ، نگهداری اطلاعات در سمت سرویس دهنده و گرامر مبتنی بر دیكشنری استفاده می نماید . استفاده از یك شمارنده سراسری  به منظور نگهداری تعداد دفعاتی كه یك عملیات خاص توسط تمامی سرویس گیرندگان یك برنامه وب انجام می شود ، یك نمونه متداول استفاده از application state  می باشد  .
مثلا" می توان یك event handler در فایل global.asax را تعریف كرد تا تعداد session  ایجاد شده و یا  تعداد درخواست های دریافتی توسط یك برنامه را ثبت كند . همچنین ، می توان از روشی مشابه در Page. Load به منظور تعیین تعداد دفعاتی كه یك صفحه خاص توسط سرویس گیرندگان مختلف درخواست شده است ، استفاده كرد .

كد زیر نحوه انجام این كار را مشخص می كند .
 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
 Dim Count As Integer = CType(Application("HitCounter"), Integer)
 Count += 1
 Application(
"HitCounter") = Count
 lblCounter.Text = Count.ToString()
End Sub

لازم است مجددا" به این نكته اشاره گردد كه آیتم های application state به عنوان شی ذخیره می گردند ، بنابراین می بایست در زمان بازیابی آنها را cast كرد . تاریخ اعتبار و یا مصرف آیتم های ذخیره شده در application state هرگز به اتمام نخواهد رسید و تا زمانی كه برنامه و یا سرویس دهنده راه اندازی مجدد نگردد و یا حوزه برنامه خود را refresh ننماید ( به علت تنظیمات ادواری اتوماتیك پردازه و یا بهنگام سازی یكی از صفحات و یا عناصر موجود در برنامه ) ، امكان استفاده از آنها وجود خواهد داشت .
امروزه اغلب از application state به دلیل عدم كارآئی مناسب  استفاده نمی شود . در مثال قبل ، همواره این احتمال وجود خواهد داشت كه در شمارنده مقدار درستی ذخیره نگردد ( خصوصا" در مواردی كه ترافیك بالا باشد ) . به عنوان مثال ، در صورتی كه دو سرویس گیرنده در یك زمان مشابه صفحه ای را درخواست نمایند ، دارای مجموعه ای از رویدادها به شرح ذیل خواهیم بود :

  • كاربر A مقدار جاری شمارنده را ( فرضا" عدد 432 ) بازیابی می نماید .
  • كاربر B مقدار جاری شمارنده را ( فرضا" عدد 432 ) بازیابی می نماید .
  • كاربر A مقدار شمارنده را تغییر و آن را به 433 تغییر می دهد .
  • كاربر B  مقدار شمارنده را تغییر و آن را به 433 تغییر می دهد .

به عبارت دیگر ، یكی از درخواست ها باعث افزایش شمارنده نمی گردد ، چراكه دو سرویس گیرنده بطور همزمان به شمارنده دستیابی داشته اند . برای پیشگیری از بروز این مسئله ، می بایست از متدهای Lock و Unlock استفاده كرد . با استفاده از متدهای فوق در هر لحظه صرفا" به یك سرویس گیرنده اجازه دستیابی به مجموعه application state  داده می شود . 

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
  Application.Lock()
  Dim Count As Integer = CType(Application("HitCounter"), Integer)
  Count += 1
  Application("HitCounter") = Count
  Application.Unlock()
 
 lblCounter.Text = Count.ToString()
End Sub

سایر سرویس گیرندگانی كه صفحه را درخواست می نمایند می بایست تا زمانی كه مجموعه application state آزاد نشده است ، منتظر بمانند . این وضعیت می تواند كاهش كارآئی برنامه را به دنبال داشته باشد .
به عنوان یك قانون كلی ، مقادیری كه دائما" و با فركانس بالا تغییر می یابند نمی توانند كاندیدی مناسب جهت استفاده از application state باشند .
application state در دنیای دات نت بندرت استفاده می شود چراكه دو كاربرد متداول استفاده از آن با روش های موثرتر دیگر جایگزین شده است .

  • در گذشته ، از application state برای ذخیره ثوابت در سطح برنامه نظیر یك connection string بانك اطلاعاتی استفاده می گردید . هم اینك در دات نت می توان این نوع ثوابت را به سادگی در فایل web.config كه به مراتب از انعطاف بیشتری برخوردار است ذخیره نمود .

  • در گذشته برای ذخیره اطلاعاتی كه در یك برنامه از آنها بدفعات استفاده می گردید و برای تولید این اطلاعات زمان زیادی صرف می گردید ، استفاده می شد ( نظیر یك كاتولوگ كامل از محصولات ) . افزایش حجم كاتالوگ و  معتبر سازی داده موجود در اینچنین كاتالوگ هائی ، همواره از مشكلات برنامه نویسان بوده است . هم اینك و با استفاده از دات نت می توان از فنآوری cache كه دارای كارآئی بمراتب بالاتری نسبت به روش های پیشین و بكارگرفته شده در application state است ، استفاده كرد .

 فایل Global.asax
با استفاده از فایل global.asax می توان كد مورد نیاز جهت برخورد با رویدادهائی در سطح برنامه را ایجاد كرد . رویدادهای فوق در نقاط مختلفی از چرخه حیات یك برنامه وب محقق می گردند ( مثلا" زمانی كه session ایجاد می گردد ) . همین موضوع باعث شده است كه فایل global.asax  بتواند در تعامل مناسب با ویژگی های state management قرار بگیرد . مثلا" می توان از فایل global.asax برای مقداردهی اولیه مجموعه ای از اشیاء كه قصد داریم آنها را در  application state ذخیره نمائیم ، استفاده كرد .
فایل global.asax ، همانند یك فایل aspx  . است . با این تفاوت كه این نوع فایل ها نمی توانند شامل تگ های HTML و یا ASP. NET باشند . در مقابل می توان در آنها event handler مورد نیاز را قرار داد . مثلا" فایل global.asax زیر در مقابل رویداد Application.EndRequest از خود واكنش نشان می دهد ( رویدادی كه قبل از ارسال صفحه برای كاربر محقق می گردد ) .

<%@ Application Language="VB" %>
 <script runat=
"server">
   Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs)
      Response.Write(
"<hr>This page was served at " & DateTime.Now.ToString())
   End Sub
</script>

event handler  فوق از متد write شی از قبل تعبیه شده Response برای نوشتن یك footer در پائین صفحه ( تاریخ و زمان ایجاد صفحه ) استفاده می نماید .
هر برنامه ASP.NET می تواند دارای یك فایل global.asax باشد كه پس از استقرار در دایركتوری مجازی مربوطه ، ASP.NET آن را بطور اتوماتیك تشخیص و از آن استفاده خواهد كرد . مثلا" ، اگر فایل global.asax فوق را در یك دایركتوری مجازی قرار دهیم ، شاهد نمایش یك footer در پائین هر یك از صفحات موجود در برنامه خواهیم بود .
اضافه كردن یك footer  اتوماتیك در پائین صفحات ، یك عملیات مفید برای سایت های حرفه ای نمی باشد . نوشتن یك ركورد در یك بانك اطلاعاتی مختص ثبت وقایع ( log ) ، شاید كاربرد مناسب تری از ویژگی فوق را نشان دهد . هم اینك تعداد زیادی از برنامه نویسان برنامه های وب تمایل به  استفاده از فایل global.asax را ندارند . فایل فوق از مدل code-behind حمایت می نماید  .

رویدادهای Application
Application.EndRequest ، صرفا" یكی از رویدادهای موجود جهت استفاده در فایل global.asax است . برای ایجاد یك event handler  متفاوت ، می توان یك روتین با نام دلخواه را ایجاد كرد .
برخی از متداولترین رویدادهای application  عبارتند از :

  • Application_Start : در زمان آغاز به كار برنامه و دریافت اولین درخواست توسط هر یك از كاربران ، محقق می گردد . رویداد فوق در پاسخ به درخواست های بعدی محقق نخواهد شد . از این رویداد معمولا" برای ایجاد و یا cache برخی اطلاعات اولیه  استفاده  می شود.

  •  Application_End : رویداد فوق پس از اتمام فعالیت برنامه ، محقق می گردد ( عمدتا" زمانی كه سرویس دهنده وب راه اندازی مجدد می گردد ) . در روتین مربوطه می توان كد مورد نیاز برای پاكسازی را درج كرد .

  •  Application_BeginRequest : رویداد فوق پس از دریافت هر درخواست توسط برنامه ، محقق می گردد  ( قبل از اجرای كد صفحه )  .

  • Application_EndRequest : رویداد فوق پس از دریافت هر درخواست توسط برنامه ، محقق می گردد  ( پس از اجرای كد صفحه )  .

  • Session_Start : رویداد فوق زمانی محقق می گردد كه درخواست یك كاربر جدید دریافت و یك session فعالیت خود را آغاز نماید .

  • Session_End  : رویداد فوق زمانی محقق می گردد كه  مدت زمان حیات یك session به اتمام رسیده باشد ( از طریق كد و یا بطور اتوماتیك ) . 

  • Application_Error : رویداد فوق در پاسخ به یك خطاء غیرقابل پیش بینی،  محقق می گردد .

در بخش پایانی به جمع بندی دوازده مقاله منتشر شده در خصوص  session state خواهیم پرداخت .





نوع مطلب :
برچسب ها :
لینک های مرتبط :




درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :

                    
 
 
 
شبکه اجتماعی فارسی کلوب | Buy Website Traffic | Buy Targeted Website Traffic