مديريت state و مسائل در ارتباط با آن در برنامه های وب New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 چهارشنبه  11  اسفند  1395  2017  Mar.  1   Wendesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 State Management در ASP. NET 2.0 (بخش اول)

 مديريت وب

13629

27

4.5

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

State Management در ASP. NET 2.0

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



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382