آشنایی با global.asax در Asp.Net WebForm
11 روز پیش نویسنده: علیرضا بهارلویی

آشنایی با global.asax در Asp.Net WebForm

بخش پنجم

با توجه به اینکه در چندیدن مقاله قبلی به ساختارهای کلی در نسل های مختلف Asp.Net پرداختیم اکنون به سراغ یک ساختار تنظیماتی و کاربردی در ساختار زبان Asp.net خواهیم پرداخت.

بررسی کلاس عمومی Global در WebForm . این کلاس یک ساختار عمومی و قابل دسترسی برای همه بخش های یک وب سایت نوشته شده در asp.net webform را دارد.

اولین نکته ای که باید در نظر گرفت وجود این کلاس به صورت عمومی میتواند بعضی از الگوریتم هایی که نیاز به واکنش لحظه ای برای بخش های مختلف یک وب سایت نیاز است را پاسخ دهی کند.

پس این کلاس علاوه بر عمومی بودن و  در دسترس بودن برای همه قسمت ها است واکنش و پاسخ دهی لحظه ای هم دارد. اما چرا این کلاس مهم و کارآمد است.

در این کلاس که با همین عنوان Global.asax  به صورت پیش فرض ذخیره شده است چندین متد وجود دارد که در اینجا بررسی خواهیم کرد.

Application_Start()

وجود متدی بنام Application_Start() دراین کلاس برای کنترل و تنظیم رویداد های آغازین وب سایت نوشته شده خواهد بود.

مثلا مسیر یابی در صفحات براساس ریشه سایت . وقتی شما درخواست یک صفحه مانند صفحه اصلی را برای نمایش میدهید کامپایلر باید بداند از کجا شروع کند تا بتواند صفحه مورد نظر را پیدا و نمایش بدهد.پس اینجا مسیریابی را تعریف تا رویدادهای مسیریابی به درستی انجام شود.

    void Application_Start(object sender, EventArgs e)
    {
       RouteConfig.RegisterRoutes(RouteTable.Routes);
    }

RouteConfig در اصل تنظیمات مسیریابی برعهده خواهد گرفت. چگونگی انجام این عملیات بسته به الگوریتم پیشفرض خود برنامه دارد.

Application_End

در مقابل هر شروع یک پایانی وجود دارد. پس برای رویداد های پایانی هم میتوان کنترل لازم را انجام داد. در متد Application_End میتوان این کار را انجام داد.

نکته ای که باید اشاره کرد این است که این متدها اشاره ای به پایان و شروع یک رویداد دارند نه شروع و پایان عمر یک وب سایت. یعنی وقتی کاربری درخواست مشاهده صفحه وب سایت را میدهد یک رویداد شروع و موقع ای که از سایت خارج و مرورگر را میبندد پایان رویداد رخ میدهد.

پس فعالیت یک کاربر در وب سایت ما رویداد شروع و پایان است و هر رویدادی که تعریف بشود برای همه کاربران از شروع تا پایان فعالیتشان در لحظه حضور در صفحات وب سایت تعریف می شود.

Application_Error

مورد بعدی رویداد های متد Application_Error می باشد. در این متد برای تمامی رویدادهایی که به یک خطای خواسته یا ناخواسته بر میگردد مدیریت رویداد نوشته میشود.

مثلا کاربر درخواست یک صفحه ای به اشتباه میدهد که وجود ندارد. پس اینجا با مدیریت رویداد درخواست خطای صفحه 404 را میتوان تعریف تا کاربر با آن در این لحظه مواجه و متوجه اشتباه خود بشود.

تا اینجا رویداد ها بر اساس لحظه ها تعریف شدند. لحظه شروع یا لحظه خطا و ... اما گاهی پیش می آید که باید یک رویداد برای یک زمان مشخص تعریف و در یک بازه زمانی حفظ بشود.

در این مورد باید از یک حافظه موقت بنام Session استفاده نمود.

Session_Start

این متد برای حفظ رویدادهای شروع به کار میرود. وقتی کاربر وارد میشود رویداد برایش تعریف میگردد اما این رویداد لحظه ای نیست و قابل نگهداری تا زمان پایان عمر Session است. هر Session را یک عمر پیش فرض دارد مثلا 5 دقیقه. زمان آن قابل تغییر می باشد.

از لحظه ورود و تعریف رویداد این متد رویداد را در حافظه موقت خود نگهداری میکند. مثلا وقتی کاربر به سایت ما وارد میشود میتوانیم آمار بازدیدکنندگان را محسابه کنیم. 

Session_End

 این متد مقابل رویداد بالا قرار دارد. رویداد را در بازه زمانی مشخص تا پایان نگهداری میکند. و بعد از آن مقدار رویداد از حافظه موقت پاک میشود.

یک مثال برای رویداد های بالا.


void Application_Start(object sender, EventArgs e) 
    {
          Application["count"] = 0;
    }
void Session_Start(object sender, EventArgs e) 
    {
          Application["count"]) + 1;
    }

void Session_End(object sender, EventArgs e) 
    {
          Application["count"]) - 1;

    }     

 

در نمونه کد بالا برای حضور کاربر در سایت یک شمارنده قرار داده شده است که پیش فرض 0 می باشد. در رویداد شروع که کاربر وارد سایت میشود متد Session_Start یک واحد به مقدار پیش فرض اضافه میکند و تعداد افراد حاضر در سایت مشخص میشود. اگر کاربر از سایت خارج بشود در Session_End یک واحد از افراد آنلاین کسر میگردد.

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

در این مقاله به متدهای تعریف شد برای رویدادهای مشخص در webform پرداختیم. بعنوان اخرین نکته این را باید اعلام کنیم که بعضی از رویدادهای تعریف شدنی و از پیش تعریف شده نیستند.

یعنی میتوانیم آنها را خلق کنیم. پس نحوه پیاده سازی آنها در این کلاس متفاوت است.

برای این رویدادهای باید درخواست ارسال شود تا پاسخ دهی رخ بدهد.

Application_BeginRequest

برای شروع از متد بالا استفاده میشود. این متد درخواست ارسال شده را بررسی میکند و رویدادی که برایش تعریف شده باشد را اجرا میکند.

و بعد برای شناسایی کاربر درخواست دهنده اقدام میکند.

AuthenticateRequest

متد بالا شناسایی فرد درخواست کننده را برعهده دارد. بعد از این مورد به ترتیب متدهایی که نیاز هستند اجرا میشود و در انتها Application_EndRequest اجرا میشود.

در این روش رویداد ها فراوان و پیچیدگی کار خارج از این مقاله می باشد. پس در همین حد کفایت میکند.

در انتها باید متذکر شوم این کلاس عمومی برای کنترل رویداد و انجام کارهایی پیش فرض در صورت رخ داد رویداد ها را برعهده دارد که البته در این نسل به این سبک پیاده سازی شده است.

پایان بخش پنجم