تبلیغات
آموزشASP.NET - State Management در ASP. NET 2.0 (بخش دوازدهم)
 
فردا روشن اسن به
آموزش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 خواهیم پرداخت .





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


سه شنبه 14 شهریور 1396 12:56 ب.ظ
Great blog! Do you have any tips and hints for aspiring writers?
I'm hoping to start my own site soon but I'm a little lost on everything.
Would you advise starting with a free platform
like Wordpress or go for a paid option? There are so many choices out there that I'm totally confused
.. Any tips? Kudos!
چهارشنبه 1 شهریور 1396 12:02 ب.ظ
I have learn some excellent stuff here. Certainly value bookmarking for revisiting.
I wonder how so much attempt you set to make any such wonderful informative web site.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

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

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








جستجو

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