يكي از مهمترين تفاوت هاي موجود بين برنامه هاي وب و
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از viewstateبراي بخاطر سپردن stateاستفاده مي نمايند . اطلاعات view stateدر يك فيلد مخفي نگهداري شده و بطور اتوماتيك پس از هر postbackبراي سرويس دهنده ارسال مي گردد . view stateمحدود به كنترل هاي سرويس دهنده نمي گردد و در صورت ضرورت مي توان مجموعه اي از اطلاعات مورد نياز را مستقيما" در مجموعه view stateذخيره تا امكان بازيابي آنها پس از هر postbackفراهم شود . نوع هاي مختلفي را مي توان در view stateذخيره نمود . نوع هاي داده ساده و اشياء سفارشي نمونه هائي در اين زمينه مي باشند .
خصلت ViewStateصفحه، مجموعه view stateرا ارائه مي نمايد . اين خصلت يك نمونه از كلاس مجموعه StateBagاست .براي اضافه كردن و حذف آيتم هائي در اين كلاس ، از گرامري مشابه با يك ديكشنري استفاده مي گردد كه در آن هر آيتم داراي يك نام منحصر بفرد است .
كد زير نحوه استفاده از view stateرا نشان مي دهد .