تبلیغات
آموزشASP.NET - State Management در ASP. NET 2.0 (بخش اول)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 
سه شنبه 24 اسفند 1389 :: نویسنده : ارش کاکاوند
یكی از مهمترین تفاوت های موجود بین برنامه های وب و Desktop  ، مدیریت state است كه در آن می بایست به این پرسش پاسخ داده شود كه نحوه نگهداری اطلاعات در ارتباط با كاربر جاری به چه صورت است ؟
در یك برنامه سنتی ویندوز ، state بطور اتوماتیك مدیریت می گردد . حافظه به حد فراوان یافت می شود و همواره در دسترس است . در برنامه های وب داستان بگونه ای دیگر است . هزاران كاربر ممكن است بطور همزمان برنامه ای مشابه را بر روی كامپیوتری یكسان ( سرویس دهنده وب ) اجراء و هر یك از آنان از طریق پروتكل HTTP ( برگرفته شده از  Hypertext Transfer Protocol) كه دارای ماهیتی stateless است با سرویس دهنده وب ارتباط برقرار نمایند . مجموعه شرایط فوق باعث شده است كه نتوان برنامه های وب را با سناریوئی دقیقا" مشابه با برنامه های سنتی ویندوز طراحی و پیاده سازی كرد .

هیچگونه فریمورك برنامه نویسی وب ، صرفنظر از میزان پیشرفته بودن آن ، نمی تواند ماهیت stateless بودن پروتكل HTTP را تغییر دهد. پس از هر درخواست و پاسخ به آن ، ارتباط منطقی سرویس گیرنده با سرویس دهنده قطع خواهد شد . معماری فوق ، این اطمینان را ایجاد می نماید كه برنامه های وب بتوانند به هزاران كاربر بطور همزمان و بدون نگرانی در خصوص حافظه پاسخ دهند . استفاده از روش های مختلف برای ذخیره اطلاعات بین درخواست های متعدد یك كاربر و بازیابی آنها در زمانی كه به آنها نیاز است از جمله مشكلات معماری فوق برای پیاده كنندگان برنامه های وب محسوب می گردد . 
آشنائی و درك مناسب نسبت به محدودیت های  state ، یكی از مفاهیم كلیدی در زمان ایجاد برنامه های وب كارآ و قدرتمند است .
در مجموعه مقالاتی كه در این خصوص آماده و بتدریج بر روی سایت منتشر خواهد شد به بررسی موارد زیر خواهیم پرداخت :
  • آشنائی با مفاهیم ، جایگاه و لزوم مدیریت state در برنامه های وب
  • آشنائی با پتانسیل های ارائه شده در ASP. NET 2.0 برای ذخیره سازی و مدیریت اطلاعات
  • آشنائی با گزینه های متفاوت موجود به منظور مدیریت state نظیر View state ، Session state ، كوكی های سفارشی 
  • نحوه انتقال اطلاعات از یك صفحه به صفحه دیگر

 مدیریت state و مسائل در ارتباط با آن
در یك برنامه سنتی ویندوز ، كاربران با یك برنامه در حال اجراء بطور پیوسته ارتباط برقرار می نمایند . بخشی از حافظه موجود بر روی كامپیوتر Desktop  برای ذخیره  تنظیمات جاری اطلاعات محیط كار كاربر اختصاص داده می شود .
در یك برنامه وب ، داستان كاملا" متفاوت است . شاید از دید كاربران یك سایت حرفه ای اینگونه برداشت شود كه یك برنامه بطور مستمر در حال اجراء است و به آنان سرویس های لازم را می دهد . علی رغم این كه ظاهر موضوع درست بنظر می آید ولی در پس پرده داستان بگونه ای دیگر دنبال می شود .  برنامه های وب از یك الگوی دستیابی غیرمتصل كارآ استفاده می نمایند . در این الگو ، سرویس گیرنده پس از ارتباط با سرویس دهنده از آن درخواست یك صفحه را می نماید . پس از پاسخ به سرویس گیرنده ،ارتباط منطقی ایجاد شده قطع و سرویس دهنده بی خیال هر گونه اطلاعاتی در رابطه با سرویس گیرنده می گردد . پس از دریافت صفحه درخواستی توسط سرویس گیرنده ، برنامه اجراء خود را متوقف و ASP.NET engine اشیاء مربوط به صفحه را دور می اندازد .
با توجه به این كه سرویس گیرندگان لازم است در اكثر موارد صرفا" برای چندین ثانیه متصل باشند ، یك سرویس دهنده وب می تواند به هزاران درخواست با كارآئی مطلوب پاسخ دهد .
در صورتی كه لازم است اطلاعات بین چندین عملیات كاربر نگهداری شوند ، می بایست از راهكارهای مختلفی به منظور مدیریت state استفاده كرد .

View state
همانگونه كه اطلاع دارید كنترل های سرویس دهنده ASP.NET از view state برای بخاطر سپردن state استفاده می نمایند . اطلاعات view state در یك فیلد مخفی نگهداری شده و بطور اتوماتیك پس از هر postback برای سرویس دهنده ارسال می گردد . view state محدود به كنترل های سرویس دهنده نمی گردد و در صورت ضرورت می توان مجموعه ای از اطلاعات مورد نیاز را مستقیما" در مجموعه view state ذخیره تا امكان بازیابی آنها پس از هر postback فراهم شود . نوع های مختلفی را می توان در view state ذخیره نمود . نوع های داده ساده و اشیاء سفارشی نمونه هائی در این زمینه می باشند .
خصلت ViewState صفحه، مجموعه view state را ارائه می نماید . این خصلت یك نمونه از كلاس مجموعه StateBag است .برای اضافه كردن و حذف آیتم هائی در این كلاس ، از گرامری  مشابه با یك دیكشنری استفاده می گردد  كه در آن هر آیتم دارای یك نام منحصر بفرد  است .
كد زیر نحوه استفاده از view state را نشان می دهد .

 ViewState("Counter") = 1

دستور فوق ، مقدار 1 را در مجموعه view state قرار داده و به آن یك نام منحصربفرد را نسبت می دهد ( Counter  ) . در صورتی كه آیتم دیگری با همین نام در view state موجود نباشد ، یك آیتم جدید بطور اتوماتیك به آن اضافه می گردد . در صورتی كه یك آیتم با نام Counter در view state موجود باشد ، با مقدار فوق جایگزین می گردد . 
برای بازیابی آیتم های ذخیره شده در view state  از نام نسبت داده شده به هر یك از آنها استفاده می گردد . همچنین ، لازم است كه مقدار بازیابی شده را با استفاده از گرامر casting به نوع داده مناسب تبدیل نمود چراكه مجموعه ViewState تمامی آینم ها را به عنوان اشیاء عام ذخیره می نماید تا بتواند با نوع های داده مختلف سرو كار داشته باشد . 
كد زیر نحوه بازیابی مقدار نسبت داده شده به Counter از view state  و تبدیل آن به یك عدد صحیح را نشان می دهد .

Dim counter As Integer
counter = CType(ViewState("Counter"), Integer)

در صورت عدم وجود اطلاعات مورد نظر در view state با یك NullReferenceException مواجه خواهیم شد . بنابراین ، لازم است كه همواره قبل از بازیابی و تبدیل داده ذخیره شده در view state از وجود آن در ساختار فوق اطمینان حاصل نمود . 
برای آشنائی بیشتر با نحوه بكارگیری view state در برنامه های وب به بررسی یك نمونه مثال كاربردی خواهیم پرداخت .

مثال : ثبت تعداد دفعاتی كه بر روی یك دكمه كلیك می گردد
كد زیر یك برنامه ساده شمارنده را نشان می دهد كه در آن تعداد دفعاتی كه بر روی یك دكمه كلیك می شود تشخیص داده شده و تعداد آن در خروجی نمایش داده می شود . بدون استفاده از یك راهكار مناسب برای مدیریت state ، شمارنده بطور دائم عدد 1 را در خروجی نشان خواهد داد .
برای ایجاد خروجی مورد نظر ، می بایست از یك راهكار مناسب (view state ) جهت مدیریت state استفاده گردد .

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %>

<script runat="server">
Sub
cmdIncrement_Click(ByVal sender As Object,ByVal e As EventArgs) Handles cmdIncrement.Click
 Dim Counter As Integer
 If
ViewState("Counter") Is Nothing Then
    Counter = 1
 Else
     Counter = CType(ViewState("Counter"), Integer) + 1
 End If
 ViewState("Counter") = Counter
 lblCount.Text =
"مقدار شمارنده برابر است با : " & Counter.ToString()
End Sub
</
script
>

<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" >
<
head id="Head1" runat="server">
    <
title>تست view state </title>
</
head>
<
body style="font-family: Tahoma">
    <
form id="form1" runat="server">
    <
div>
       <
asp:Button ID="cmdIncrement" runat="server"
                         
Text
="افزایش شمارنده" Font-Names="Tahoma" /><br /><br />
       <
asp:Label ID="lblCount" runat="server"
                       
Font-Names="Tahoma"></asp:Label>&nbsp;
   
</div>
    </
form>
</
body>
</
html>

در كد فوق قبل از تلاش برای بازیابی آیتم مورد نظر  از view state ، وجود آن در ساختار فوق بررسی می گردد .  شكل 1 خروجی برنامه فوق را نشان می دهد .

استفاده از view state برای نگهداری مقدار counter
شكل 1 : استفاده از view state برای نگهداری مقدار counter

برای حل مسئله مدیریت state در مثال فوق و نگهداری مقدار  counter در بین چندین postback از روش هائی دیگر نیز می توان استفاده كرد . به عنوان مثال ، می توان برای كنترل سرویس دهنده label ویژگی view state را فعال و از label برای ذخیره مقدار counter استفاده نمود . هر مرتبه كه بر روی دكمه "افزایش شمارنده " كلیك گردد ،  مقدار جاری از طریق خصلت text كنترل label بازیابی و پس از تبدیل به یك عدد صحیح در خروجی نمایش داده می شود .
از روش فوق نمی توان همواره به عنوان یك راهكار مناسب استفاده كرد . مثلا" ممكن است قصد ایجاد برنامه ای را داشته باشیم كه تعداد دفعاتی را كه بر روی یك دكمه كلیك می گردد ثبت نماید ولی قصد نمایش نتایج را در خروجی نداشته باشیم . در چنین مواردی می توان همچنان اطلاعات را در یك كنترل سرویس دهنده ذخیره نمود ولی مجبور خواهیم بود كه آن را مخفی نگاه داریم .
پس از انجام تمامی این كارها ، به چیزی می رسیم كه view state  آن را در اختیار ما قرار می دهد . view state ، اطلاعات را بطور اتوماتیك در یك فیلد مخفی خاص در صفحه نگهداری می نماید . با توجه به این كه ASP. NET با جزئیات این كار سروكار دارد ، كد نوشته شده توسط پیاده كنندگان از خوانائی بیشتری برخوردار خواهد بود .
در بخش دوم به بررسی نحوه ایمن سازی اطلاعات ذخیره شده در view state خواهیم پرداخت .





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


جمعه 24 شهریور 1396 04:15 ب.ظ
It's awesome to go to see this web site and reading the views of all mates on the topic of this post, while I am also keen of getting familiarity.
سه شنبه 14 شهریور 1396 12:43 ب.ظ
Thanks for sharing your thoughts on State. Regards
دوشنبه 30 مرداد 1396 02:55 ب.ظ
great put up, very informative. I wonder why the opposite specialists of this sector do not understand this.

You should proceed your writing. I'm confident, you've a
huge readers' base already!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

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

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








جستجو

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