PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برخورد مناسب با خطاهای مدیریت نشده در asp



Borna66
07-29-2010, 01:47 PM
در اين مقاله سعی داریم با نوشتن یک روتین در فایل Global.asax ، خود را از خطاهای احتمالی برنامه در حین بازدید مطلع سازیم و همچنین کاربر را به صفحه ای مناسب هدایت کنیم.

یکی از مسائل مهم امنیتی در پروژه های بزرگ مبتنی بر وب مدیریت و برخورد مناسب با خطاهای برنامه است که در حین بازدید به هر دلیلی رخ می دهد. یکی از راه های مقابله با خطاها که نزد برنامه نویسان ایرانی بسیار متداول شده است استفاده از ساختار سعی و خطا یا همان Try & Catch می باشد.
مهمترین دلیل برای عدم استفاده از این روش ، در اختیار قرار دادن اطلاعات مهمی است که این شیوه در اختیار بازدید کننده قرار می دهد. (مانند ساختار درخواست Sql و نام بانک اطلاعاتی ، نام جداول و حتی فیلد ها و ... ).
موضوع فوق الذکر تنها یکی از مواردی است که ما را مجبور به ارائه راه حلی برای مقابله صحیح با خطاهای برنامه می کند.
مسأله دیگر اتفاقات اخیر برای همین سایت Aspcode.Ir بود که تعدادی از کاربران به بنده ایمیل زدند و از سیستم ثبت نام سایت که ختم به صفحه پیغام خطا می شد شکایت داشتند.
خیلی فکر کردم در رابطه با پیدا کردن مشکل اما کد برنامه کاملا" بی نقص بود و من هم تا به حال با مشکلی که کاربران سایت مطرح می کردند مواجه نشده بودم !
در نهایت تصمیم گرفتم با کمی کد نویسی رد کاربران خود را بگیرم.

مقابله با خطاهای مدیریت نشده برنامه
شما با کد نویسی رویداد Application_Error در فایل Global.asax می توانید تمام خطاهایی که در برنامه بوسیله ساختار Try & Catch مدیریت نشده اند را مدیریت کنید.





void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}







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

1- دریافت جزییات خطا (از جمله نام صفحه ، آدرس صفحه و مقدار query String ، علت خطا و...) :








string ErrorMessage = "Application Error ... \n\n";
//Path And Name Of The Page
ErrorMessage += "Page : " + Request.Path;
//Url Query String
ErrorMessage += "\n\nQuery String : " + Request.RawUrl;
//Last Error Exception Object & Error Message
Exception myex = Server.GetLastError();
ErrorMessage += "\n\nError Message : " + myex.Message.ToString();
//Source Of The Error Message
ErrorMessage += "\n\nError Source : " + myex.Source;
//Stack Trace Of The Error
ErrorMessage += "\n\nError Stack Trace : " + myex.StackTrace;
//Method Where The Error Occurred
ErrorMessage += "\n\nError Target Site : " + myex.TargetSite;
//Date Time
ErrorMessage += "\n\nDateTime : "+ DateTime.Now.ToString();







در کد فوق متغیر رشته ای را با نام ErrorMessage برای نگهداری جزییات خطا در نظر می گیریم. همانطور که از توضیحات موجود بالای هر دستور مشخص است بصورت مرحله به مرحله از نام صفحه تا تاریخ و زمان رخ دادن خطا را به مقدار ErrorMessage الحاق می کنیم. حتی آدرس IP کاربر و دیگر موارد را می توان به کد فوق افزود.

2- ارسال متن خطا به ایمیل مدیر سایت :





//Send Email
EmailCls.SendNew(ErrorMessage); //ErrorMessage پارامتر ورودی و متن نامه ارسالی







در این مرحله خطا را به کمک دستور فوق به ایمیل خود ارسال می کنیم. EmailCls کلاس ساده ایست به منظور ارسال ایمیل که می توانید آن را از قسمت دریافت کد ، در انتهای همین مقاله دریافت کنید. (توضیح در رابطه با نحوه ارسال ایمیل را در آینده ای نزدیک می توانید در بخش مقالات با موضوع کلیات Asp.Net مطالعه فرمایید).

3- هدایت کاربر به صفحه ای مناسب که شامل پیغامی جهت تلاش دوباره است :


Response.Redirect("err.aspx");

دانلود فایل ضمیمه | دریافت کد (http://www.aspcode.ir/Download/errhnd.zip)