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

در این بخش بحث مربوط به نحوه پیكربندی session در برنامه های وب را ادامه می دهیم . 

Timeout
یكی دیگر از تنظیمات مهم در ارتباط با  session state ، مشخص كردن مدت زمان timeout است . مقدار در نظر گرفته شده برای خصلت فوق ( تعریف شده در فایل web.config ) ، مدت زمان انتظار ASP.NET  قبل از حذف session را مشخص می كند ( عدم دریافت هیچگونه درخواست در بازه زمانی مشخص شده ) .
در نمونه كد زیر به ASP.NET اعلام شده است كه اگر پس از گذشت 20 دقیقه درخواستی از سرویس گیرنده دریافت نگردید ، session آن را حذف كن .

<sessionState 
       timeout="20" />

خصلت فوق یكی از مهمترین پارامترهای مدیریت session در برنامه های وب است كه عدم مقداردهی مناسب آن می تواند نتایج نامطلوبی را در ارتباط با كارآئی یك برنامه وب به دنبال داشته باشد . در زمان مقداردهی پارامتر فوق می بایست به این نكته دقت شود كه اولا" زمان در نظر گرفته شده به اندازه ای كوتاه باشد كه سرویس دهنده بتواند پس از سپری شدن مدت زمان اندكی كه كاربر از برنامه استفاده نمی نماید ، منبع ارزشمند حافظه را آزاد نماید  و  ثانیا" كاربر بتواند بدون نگرانی در خصوص از دست دادن session خود با خیالی آسوده از برنامه استفاده نماید .
در صورت نیاز ، می توان مقداردهی پارامتر فوق را از طریق كد نیز انجام داد . به عنوان نمونه در مواردی كه یك session حاوی یك حجم غیرمتعارف از اطلاعات باشد ، می توان مدت زمان حیات session را محدودتر كرد . كد زیر نحوه تغییر مقدار پارامتر فوق را به 10 دقیقه نشان می دهد .

 Session.Timeout = 10

 

Mode
با استفاده از خصلت mode می توان نحوه ذخیره سازی اطلاعات session  را مشخص كرد . به این خصلت می توان  مقادیری نظیر InProc ، off ، StateServer ، SQLServer و Custom را نسبت داد . در واقع به كمك خصلت فوق  ، استراتژی ذخیره سازی اطلاعات session مشخص می گردد .
 در ادامه با هر یك از موارد فوق بیشتر آشنا خواهیم شد . قبل از آن لازم است به یك نكته مهم اشاره گردد . در صورتی كه برنامه ASP.NET بر روی بیش از یك سرویس دهنده وب هاست شده باشد  ( كه از آن با نام web farm یاد می شود ) ، می بایست دامنه پیكربندی را گسترش داد تا این اطمینان ایجاد شود كه سرویس دهندگان وب همساز می باشند . در غیراینصورت ، ممكن است یك سرویس دهنده اطلاعات موجود در session را با روشی متفاوت نسبت به سرویس دهنده دیگر ، رمز نماید . بدیهی است در چنین مواردی اگر كاربر از یك سرویس دهنده به سرویس دهنده دیگر هدایت شود ، در session وی اختلال ایجاد خواهد شد . برای حل این مشكل می بایست با مراجعه به بخش <machineKey>  فایل machine.config  تنظمیات مورد نظر را بگونه ای انجام داد كه شیوه رمزنگاری session بر روی یك سرویس دهنده با سرویس دهنده دیگر یكسان و سازگار باشد .

 InProc
مقدار پیش فرض خصلت mode می باشد و  عملكرد آن همانند ذخیره سازی session state در نسخه های قدیمی ASP است . در این روش اطلاعات در پردازه مشابه ASP.NET worker threads  ذخیره می گردند . این روش بالاترین كارآئی و كمترین ماندگاری  را دارد . در صورتی كه سرویس دهنده به هر دلیلی راه اندازی مجدد گردد ، اطلاعات session از بین خواهند رفت . روش فوق برای اكثر وب سایت های كوچك مناسب است . در مواردی كه برنامه وب در یك web farm هاست شده باشد ، از این روش نمی توان استفاده كرد . در چنین مواردی و به منظور به اشتراگ گذاشتن اطلاعات session بین چندین سرویس دهنده ، می بایست از  گزینه  Out-of-Process و یا سرویس SQL Server state استفاده كرد . 
در برخی موارد ممكن است  برنامه نویسان به این نتیجه رسیده باشند كه كاربران اطلاعات session خود را بدون هیچگونه دلیلی از دست می دهند . همین امر باعث می شود كه آنان استفاده از گزینه ای غیر از InProc را در دستور كار قرار دهند .  در ASP.NET ، حوزه  برنامه ها به دلایل متعددی ممكن است راه اندازی مجدد گردد ( نظیر اعمال تغییرات در پیكربندی ، بهنگام سازی صفحات ) . 
توجه داشته باشید ، در زمان استفاده از  StateServer و یا SQLServer ، اشیائی می توانند در  session state  ذخیره گردند كه قابلیت سریال شدن را داشته باشند . در غیراینصورت ، ASP.NET قادر به انتقال و یا ارسال اشیاء به state service و یا ذخیره آنها در بانك اطلاعاتی نخواهد بود .

 off
با انتخاب مقدار فوق برای خصلت mode ، مدیریت state در تمامی صفحات یك برنامه وب غیرفعال خواهد شد . بدیهی است با غیرفعال كردن session شاهد بهبود ملموس كارآئی در وب سایت هائی خواهیم بود كه عملكرد و سرویس دهی آنها مشروط به استفاده از session  نمی باشد . 

StateServer
با در نظر گرفتن مقدار فوق برای خصلت mode ، از یك سرویس ویندوز جداگانه برای مدیریت state استفاده می گردد . سرویس فوق بر روی سرویس دهنده مشابه اجراء می گردد ولی در خارج از پردازه اصلی ASP.NET قرار می گیرد . رویكرد فوق دارای مزایا و معایب مختص به خود می باشد . مهمترین مزیت استفاده از یك سرویس دهنده دیگر برای ذخیره اطلاعات session ، عدم وابستگی آن به پردازه ASP.NET است . در چنین مواردی با راه اندازی مجدد پردازه ASP.NET ( به هر دلیل ) ، اختلالی در داده ذخیره شده در session ایجاد نخواهد شد چراكه آنها در یك سرویس دهنده جداگانه نگهداری شده اند . از مهمترین معایب و یا بهتر بگوئیم محدودیت های رویكرد فوق ، افزایش تاخیر زمانی در زمان ارسال اطلاعات session بین دو پردازه است . بدیهی است در صورتی كه فركانس دستیابی و تغییر اطلاعات ذخیره شده در session بالا باشد ، سرعت و كارآئی یك برنامه وب كاهش می یابد.
در زمان استفاده از StateServer ، می بایست مقدار  stateConnectionString را مشخص كرد . پارامتر فوق ، آدرس  IP كامپیوتری را كه بر روی آن سرویس StateServer اجراء شده است را به همراه شماره پورت مربوطه مشخص می نماید ( شماره پورت توسط ASP.NET تعیین می گردد و معمولا" لزومی به تغییر آن وجود ندارد ) . بدین ترتیب ، می توان StateServer را بر روی كامپیوتر دیگر هاست كرد . در صورتی كه قصد تغییر تنظیمات پیش فرض را نداشته باشیم ، از سرویس دهنده محلی استفاده خواهد شد ( با آدرس IP : 127.0.0.1 ) .    
قبل از این كه برنامه وب بتواند از سرویس فوق استفاده نماید ، می بایست آن را اجراء كرد . ساده ترین روش برای انجام این كار انتخاب گزینه Services از طریق  Control Panel  است . با مشاهده ASP.NET State Service در لیست سرویس ها ، می توان نحوه اجراء آن را مشخص نمود ( بطور اتوماتیك ) .
در مواردی كه از StateServer استفاده می گردد ، می توان برای خصلت اختیاری  stateNetworkTimeout  یك مقدار را مشخص نمود .  پارامتر فوق ، حداكثر مدت زمان انتظار برای پاسخ سرویس دهنده بر حسب ثانیه را مشخص می نماید . مقدار گزینه پیش فرض ، 10 ثانیه است .

SQLServer
با در نظر گرفتن مقدار فوق برای خصلت mode ،  از یك بانك اطلاعاتی SQL Server برای ذخیره اطلاعات session   استفاده می گردد . بانك اطلاعاتی مورد نظر توسط خصلت sqlConnectionString مشخص می گردد . روش فوق متداولترین مكانیزم برای ذخیره state در برنامه های وب می باشد ولی در مقایسه با روش های دیگر از سرعت كمتری برخوردار است .
برای استفاده از روش فوق می بایست از یك سرویس دهنده SQL استفاده شود . مقدار خصلت sqlConnectionString ، همانند الگوی استفاده شده جهت دستیابی به داده توسط ADO. NET است و شامل مشخص كردن یك منبع داده ( آدرس سرویس دهنده ) ، یك رمزعبور و شناسه كاربر ( مگر این كه از  integrated security استفاده شده باشد ) است . علاوه بر این ، می بایست stored procedures  و session موقت بانك اطلاعاتی نصب گردند . stored procedures مسئولیت ذخیره و بازیابی اطلاعات session را برعهده دارند .
ASP.NET شامل یك اسكریپت Transact-SQL برای این هدف خاص با نام  InstallSqlState.sql  است  كه در
مسیر [ C:\[WinDir]\Microsoft.NET\Framework\[Version  قرار دارد .  برای اجرای اسكریپت فوق می توان از یك برنامه كاربردی SQL Server نظیر SQL Server Management Studio یا sqlcmd.exe ( برای سرویس SQL 2005  )  و یا OSQL.exe و Query Analyze ( برای نسخه های قبلی ) استفاده كرد . اسكریپت فوق صرفا" یك مرتبه و به منظور ایجاد بانك ، جداول و  stored procedures   مورد نیاز اجراء خواهد شد .
نام بانك اطلاعاتی معمولا"  ASPState می باشد .در واقع ، connection string موجود در فایل web.config  با صراحت نام بانك اطلاعاتی را مشخص نخواهد كرد بلكه صرفا" مكان سرویس دهنده و نوع تائیدیه مشخص می گردد . كد زیر نحوه انجام این كار را نشان می دهد .

  <sessionState
      sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
      ...
   />

 

در صورتی كه قصد استفاده از یك بانك اطلاعاتی با نام دیگر  و ساختار مشابه را داشته باشیم ، كافی است مقدار خصلت  CustomSqlDatabase  برابر با true  در نظر گرفته شود .

 <sessionState
    allowCustomSqlDatabase="true"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI;Initial Catalog=CustDatabase"
     ...
 />

 


زمانی كه از یك بانك اطلاعاتی SQL Server برای ذخیره اطلاعات session استفاده می گردد ، می توان از گزینه اختیاری sqlCommandTimeout است كرد .  پارامتر فوق ، حداكثر مدت زمان انتظار برای پاسخ سرویس دهنده بر حسب ثانیه را مشخص می نماید . مقدار گزینه پیش فرض ، 30 ثانیه است .

Custom
زمانی كه برای خصلت mode مقدار  custom  در نظر گرفته  می شود  ، می بایست  session state provider را با استفاده از خصلت customProvider  مشخص كرد . خصلت فوق به نام یك كلاس كه بخشی از برنامه وب موجود در دایركتوری  App_Code  است و یا یك اسمبلی كمپایل شده موجود در دایركتوری BIN و یا GAC  ،  اشاره می نماید .
ایجاد یك provider سفارشی ، مسائل مختص به خود را دارد و می بایست با دقت پیاده سازی گردد تا بتواند اهدافی نظیر امنیت و قابلیت توسعه را به خوبی تامین نماید .  بحث بر روی provider  سفارشی خارج از حوصله این مقاله است .
برخی تولید كنندگان ممكن است نسخه هائی خاص از state provider را ارائه نمایند كه در صورت نیاز و تمایل می توان از آنها استفاده كرد . به عنوان مثال ، اوراكل ممكن است یك provider سفارشی را ارائه نماید كه امكان ذخیره اطلاعات  session را در یك بانك اطلاعاتی اوراكل فراهم نماید . 
در بخش دوازدهم  با application state آشنا خواهیم شد .





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


پنجشنبه 16 شهریور 1396 01:45 ق.ظ
It's in point of fact a great and helpful piece of info.
I am satisfied that you shared this useful info with us.
Please keep us up to date like this. Thanks for sharing.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

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

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








جستجو

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