جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
رويدادها در برنامه هاي وب دات نت
-(4 Body) 
رويدادها در برنامه هاي وب دات نت
Visitor 553
Category: دنياي فن آوري
يک برنامه در مدت زمان حيات خود با رويدادهاي متعددي مواجه مي گردد. پس از بروز رويداد ، روتين پاسخگو مسئوليت برخورد با رويداد محقق شده را برعهده خواهد گرفت . برنامه هاي وب نيز از اين قاعده مستثني نبوده و در مدت زمان حيات خود با رويدادهاي متعددي مواجه مي گردند . رويدادها و نحوه برخورد با آنان دربرنامه هاي وب ، داراي تفاوت هائي نسبت به برنامه هاي ويندوز است . رويدادها در برنامه هاي وب در سه سطح : برنامه ، صفحات و کنترل هاي سرويس دهنده ، محقق مي گردند. ترتيب و نحوه اجراي رويدادها ، تاثيري مستقيم بر نحوه پاسخگوئي به آنان توسط کدهاي نوشته شده در يک برنامه دارد. در اين مقاله قصد داريم به بررسي جايگاه و نقش رويدادها در چرخه حيات يک برنامه وب پرداخته و از اين رهگذر با تفاوت هاي موجود بين چرخه حيات يک برنامه وب و يک برنامه ويندوز بيشتر آشنا شويم .

رويداد ها در چرخه حيات يک برنامه وب

حيات يک برنامه وب ، وابسته و متاثر از Session هاي فعال مي باشد . ماداميکه Session فعال وجود داشته باشد ، برنامه وب نيز به زندگي خود ادامه خواهد داد . فرم هاي وب ، داراي عمر بسيار اندک و ناچيزي مي باشند. يک برنامه وب با درخواست صفحه شروع آن توسط مرورگر ، زندگي خود را آغاز مي نمايد . در ادامه ، سرويس دهنده وب وارد عمليات شده و يک فايل اجرائي ( فايلي با پسوند DLL ) را اجراء مي نمايد . هدف نهائي فايل فوق ، پاسخگوئي به درخواست ارسالي توسط مرورگر است . برنامه فوق ، در ادامه يک نمونه از فرم وب درخواست شده را ايجاد و HTML لازم بمنظور پاسخ دادن به درخواست را توليد و در نهايت پاسخ مربوطه را براي مرورگر ارسال مي نمايد . پس از اتمام فرآيند فوق ، نمونه فرم ايجاد شده نيز از بين خواهد رفت .
زمانيکه مرورگر داراي تگ هاي HTML توليده شده مي باشد ، کاربر قادر به ورود اطلاعات و داده مورد نظر در Text boxs ، انتخاب دکمه ها و انجام ساير عمليات مي باشد . وضعيت فوق ، تا زمانيکه يک رويداد Post-back محقق گردد ( نظير کليک نمودن بر روي يک دکمه ) ، ادامه مي يابد . پس از محقق شدن رويداد Post-back ، مرورگر داده همراه صفحه ( View State ) را براي سرويس دهنده ارسال تا پردازش هاي لازم با توجه به رويداد محقق شده ، انجام شود. زمانيکه سرويس دهنده ، View State ( داده همراه با يک صفحه ) را دريافت مي نمايد ، يک نمونه جديد از فرم وب را ايجاد و داده آن را با استفاده از View State تکميل و متناسب با رويداد محقق شده ، پردازش هاي لازم را انجام خواهد داد . پس از اتمام عمليات توسط سرويس دهنده ، نتايج بصورت تگ هاي HTML مجددا" براي مرورگر ارسال و نمونه فرم وب ايجاد شده ، از بين خواهد رفت .
زمانيکه کاربر به عمليات خود خاتمه داده و مرورگر را غير فعال مي نمايد ، Session مربوط به آن نيز خاتمه مي يابد . درصورتيکه Session هاي متعلق به ساير کاربران وجود نداشته باشد ، به حيات برنامه نيز خاتمه داده مي شود ( عملا" وضعيت فوق کمتر اتفاق مي افتد ) . ASP.NET با استفاده از garbage collection ، مديريت حافظه را انجام مي دهد ( سرويس ارائه شده توسط CLR فريمورک دات نت ) . در فرآيند فوق ، سرويس دهنده بصورت ادواري رديابي مراجعات به اشياء را انجام و در صورتيکه از يک شي مدت زمان زيادي استفاده نشده باشد ، شي مربوطه از حافظه حذف و فضاي استفاده شده توسط آن نيز آزاد مي گردد . با توجه به ماهيت عمليات فوق ، نمي توان بطور دقيق از زمان محقق شدن رويداد Application_End ، آگاهي يافت .

نگهداري داده در يک فرم وب

با توجه به اينکه فرم هاي وب داراي عمر بسيار کوتاهي مي باشند ، ASP.NET عمليات خاصي را بمنظور نگهداشت داده درج شده در کنترل هاي موجود بر روي يک فرم وب، انجام مي دهد. داده هاي درج شده در کنترل ها ، پس از هر درخواست ارسال شده و از طريق Page_init مجددا" در کنترل هاي مربوطه، بازيابي ( Restore) مي گردند. داده موجود در اين نوع کنترل ها در ادامه و از طريق رويداد Page_Load در دسترس قرار خواهند گرفت . داده ئي را که ASP.NET بين هر يک از درخواست ها ، نگهداري مي نمايد ، view state فرم وب ناميده شده و صرفا" در محدوده همان فرم وب ، قابل دستيابي و استفاده است. بمنظور استفاده از داده ورودي در يک فرم وب براي ساير فرم هاي وب ، نيازمند ذخيره سازي داده در يک متغير وضعيت از نوع اشياء Application و يا Session مي باشيم . اشياء فوق ، دو سطح متفاوت از بعد دستيابي را ارائه مي نمايند :
• متغيرهاي Application state . متغيرهاي فوق ، براي تمامي کاربران قابل دسترس و استفاده مي باشند. رفتار اين نوع متغيرها نظير متغيرهاي سراسري با قابليت دستيابي چندکاربره مي باشد. تمامي Sessions قادر به خواندن و نوشتن اين نوع متغيرها ، مي باشند .
• متغيرهاي Session state . متغيرهاي فوق، صرفا" براي يک Session ( کاربر) قابل دسترس و استفاده مي باشند. عملکرد اين نوع از متغيرها نظير داده هاي سراسري در يک برنامه استاندارد ويندوز مي باشد . صرفا" Session فعال ، قابليت دستيابي به وضعيت Session خود را دارا خواهد بود .
متغيرهاي Session و Application ، بصورت On the fly و از طريق کد نوشته شده در برنامه ، ايجاد مي گردند ( عدم استفاده از روش هاي متداول بمنظور تعريف يک متغير ). در نمونه برنامه زير ، يک متغير Session با نام Clicks تعريف شده است . متغير فوق ، تعداد دفعاتي که بر روي دکمه Button1 کليک مي گردد را در خود ذخيره و در نهايت مقدار مورد نظر در خروجي نمايش داده مي شود .

VB.NET

Private Sub Button1_Click ( ByVal sender As System.Object , _
                    ByVal e As System.EventArgs ) Handles Button1.Click
     Session ( "Clicks") = Session ( "Clicks") + 1
     Response.Write("Number of Clicks : " & Session( "Clicks")
End Sub


در يک متغير وضعيت ( Session , Application) مي توان هر نوع داده ئي را ذخيره نمود. ( از يک عدد صحيح ساده تا يک شي ) . با توجه به اينکه عملکرد متغيرهاي وضعيت ، نظير داده هاي سراسري مي باشد ، مي بايست ،استراتژي لازم بمنظور استفاده و انجام عمليات بر روي آنان ،مشخص گردد .

رويدادهاي Session و Application

برنامه نويسان مي توانند کد دلخواه خود را بمنظور پاسخگوئي به رويدادهاي Session و يا Application نوشته و آنان را در فايل Global.asax مستقر نمايند . از رويدادهاي Application بمنظور مقداردهي اشياء و داده ئي که قصد استفاده از آن توسط تمامي Session هاي فعال در برنامه وب وجود داشته باشد ، استفاده مي گردد . از رويدادهاي Session بمنظور مقداردهي اوليه داده ئي که قصد نگهداشت آن بين Session هاي خاصي وجود دارد، استفاده مي گردد . ( قصد استفاده از اين نوع متغيرها بين Session هاي متفاوت وجودندارد ) .
رويدادهاي Application ، بشرح زير مي باشند :
• Application_Start : رويداد فوق ، بلافاصله پس از ملاقات صفحه شروع برنامه توسط اولين کاربر ، محقق مي گردد .
• Application_End ، رويداد فوق ،زماني محقق مي گردد که کاربري به برنامه متصل ( مرتبط) نباشد.
• Application_BeginRequest : رويداد فوق ، در ابتداي هر در خواست ارسالي براي سرويس دهنده ، محقق مي گردد . با حرکت بين صفحات و درخواست آنان از سرويس دهنده ، يک درخواست ايجاد و متناسب با آن ، رويداد فوق نيز محقق مي گردد .
• Applicatino_EndRequest : رويداد فوق ، پس از اتمام هر درخواست ارسال شده براي سرويس دهنده ، محقق مي گردد .
• Session_Start : رويداد فوق ، زمانيکه کاربري جديد ، صفحه شروع يک برنامه را ملاقات مي نمايد ، محقق مي گردد .
• Session_End : رويداد فوق ، پس از ترک برنامه توسط يک کاربر ، محقق مي گردد( بستن مرورگر و يا پس از Time out تعريف شده )
در فرم هاي وب ، يک Session ، نمونه اي منحصربفرد از مرورگر مي باشد .يک کاربر مي تواند داراي چندين نسخه در حال اجراء از برنامه مرورگر بر روي ماشين خود باشد .در چنين وضعيتي ، در صورتيکه هر يک از مرورگرها با برنامه وب ارتباط برقرار نمايد ، هريک از آنان داراي Session منحصربفرد مربوط به خود خواهند بود .
بمنظور آشنائي با عملکرد رويدادهاي فوق ، کد نوشته شده زير را در فايل Global.asax مربوط به يک پروژه فرم وب ، مستفر نمائيد .

 

VB.NET

Sub Application_Start ( ByVal Sender As  Object , ByVal E As EventArgs )
        Application ( "AppCount") = Application ( "AppCount") + 1
End Sub
Sub Session_Start ( ByVal Sender As  Object , ByVal E As EventArgs )
        Application ( "SessCount" ) =  Application ( "SessCount" ) + 1
        Response.Write( "Number of  AppCount : " & Application  ("AppCount")   & "<br>" )
        Response.Write( "Number of  SessCount : " & Application ( "SessCount" ) & "<br>" )
End Sub
Sub Session_End ( ByVal Sender As  Object , ByVal E As EventArgs )
        Application ( "SessCount" ) =  Application ( "SessCount" ) - 1
End Sub


پس از اجراي کد فوق ، هر نمونه از مرورگر که به برنامه متصل گردد ،يک واحد به Session ، اضافه مي گردد ( مقدار شمارنده Application همچنان يک باقي خواهد ماند ) . لازم است به اين نکته نيز اشاره گردد که اشياء ذاتي نظير Session و Response در Application_Start قابل دسترس نمي باشند .

رويدادهاي فرم هاي وب

با استفاده از رويدادهاي فرم هاي وب مي توان پردازش و پشتيباني از داده استفاده شده در يک صفحه وب ، پاسخگوئي به نسبت دهي داده (ِData binding ) و برخورد با موارد استثناء ( Handle exceptions ) را در يک صفحه وب ، انجام داد. Page_Load و Page_Error از جمله رويدادهائي مي باشند که از آنان در اغلب برنامه ها ، استفاده مي گردد . رويدادهاي مرتبط با فرم هاي وب ( بترتيب محقق شدن )، بشرح زير مي باشند .
• Page_Init : رويداد فوق ، زماني محقق مي گردد که کنترل هاي سرويس دهنده ، در حافظه مستقر و از طريق view state مربوط به فرم وب ، مقداردهي اوليه گردند. (اولين مرحله در چرخه حيات يک فرم وب ).
• Page_Load : رويداد فوق ، زماني محقق مي گردد که کنترل ها ي سرويس دهنده در شي Page ، لود مي گردند. اطلاعات view state ، در اين لحظه قابل دسترس و استفاده بوده و مي توان در اين محل تنظيمات کنترلي لازم بمنظور نمايش متن بر روي صفحه را انجام داد ( انجام تغييرات مورد نظر).
• Page_PreRender : رويداد فوق ، زماني محقق مي گردد که برنامه درصدد Render نمودن شي Page مي باشد .
• Page_Unload : رويداد فوق ، پس از خروج Page از حافظه ، محقق مي گردد.
• Page_Error : رويداد فوق ، پس از مواجه شدن با يک مورد خاص و استثنائي ،محقق مي گردد .
• Page_AbortTransaction : رويداد فوق ، پس از توقف يک تراکنش ، محقق مي گردد.
• Page_CommitTransaction : رويداد فوق ، پس از پذيرش يک تراکنش ، محقق مي گردد.
• Page_DataBinding : رويداد فوق ، پس از نسبت دهي يک کنترل سرويس دهنده به يک منبع داده بر روي يک صفحه ، محقق مي گردد.
• Page_Dispose : رويداد فوق ،پس از آزاد سازي يک شي Page از حافظه ، محقق مي گردد (آخرين رويداد مرتبط با چرخه حيات يک شي Page ) .
از رويداد Page_Load بهمراه خصلت IsPostBack ، مي توان بمنظور مقداردهي اوليه داده ، در اولين مرتبه اي که کاربران يک فرم وب را مشاهده مي نمايند ، استفاده نمود.

رويدادهاي کنترل سرويس دهنده

هر يک از کنترل هاي سرويس دهنده ، نظير دکمه ها ، TextBox و DropDownList ، داراي مجموعه اي اختصاصي از رويدادهاي مرتبط با خود بمنظور پاسخگوئي به عمليات کاربران مي باشند . تمامي رويدادهاي کنترل سرويس دهنده بطور يکسان ايجاد نمي گردند . سه نوع عمده از رويدادهاي کنترل سرويس دهنده وجود دارد :
• رويدادهاي Post-Back : رويدادها ي فوق ، باعث ارسال صفحه وب براي سرويس دهنده بمنظور انجام پردازش هاي ضروري مي گردند. اين نوع از رويدادها ، ترافيکي را بين سرويس گيرنده و سرويس دهنده ، ايجاد مي نمايند ( توجه به اثرات ترافيک ايجاد شده بر کارآئي برنامه ) .
• رويدادهاي Cached : اين نوع از رويدادها ، در View state مربوط به صفحه ذخيره تا زمانيکه يک رويداد Post_Back محقق گردد .
• رويدادهاي Validation : رويدادهاي فوق ، بدون اينکه ضرورتي به انجام Post-Back و يا Cache وجود داشته باشد ، از طريق امکانات پيش بيني شده درون صفحه ، با آنان برخورد خواهد شد .کنترل هاي سرويس دهنده Validation از رويدادهاي فوق ،استفاده مي نمايند .
کنترل هاي Validation ، قبل از اينکه صفحه براي سرويس دهنده Post-Back شوند، بررسي مي گردند . زمانيکه Post-Back محقق مي گردد ، رويدادهاي Page_init و Page_Load ، پردازش و در ادامه رويدادهاي Cache و نهايتا" رويدادي که باعث Post-Back شده است ، پردازش مي گردد . کنترل هاي Button ، Link Button ,Image Button ، از جمله کنترل هائي مي باشند که باعث تحقق يک رويداد Post-Back ، مي گردند . کنترل هاي . TextBox,DropDownList,ListBox,RadioButton و CheckBox ، باعث ايجاد رويدادهائي از نوع Cache خواهند شد .
فرض کنيد ، يک فرم وب بهمراه چهار TextBox و يک دکمه OK بر روي آن را داشته باشيم . در چنين حالتي ، اگر TextBox خالي بماند ، و دکمه OK کليک گردد ، RequiredFieldValidator نمايش داده شده و رويداد ديگري پردازش نشده و صفحه براي سرويس دهنده PostBack نخواهد شد. درصورتيکه مقداري در TextBox درج و دکمه OK فعال گردد ، صفحه PostBack شده و رويداد TextChanged ، قبل از رويداد Click محقق مي گردد. برنامه زير واکنش لازم را در اين راستا انجام خواهد داد ( کليک بر روي دکمه Button1 و يا تغيير مقدار TextBox1 ).

 

VB.NET

Private Sub Button1_Click ( ByVal sender As System.Object ,_
  ByVal e As System.EventArgs ) Handles Button1.Click
      Response.Write( "Button Clicked! <Br>")
End Sub
Private Sub TextBox1_TextChanged ( ByVal sender As System.Object ,_
ByVal e As System.EventArgs ) Handles TextBox1.TextChanged
      Response.Write( "Text has Changed <Br>")
End Sub

Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image