PDA

View Full Version : چگونه يك Public Error Handler براي صفحاتم بسازم



shaki_phd
دوشنبه 06 دی 1389, 12:43 عصر
سلام دوستان
من ميخوام براي تمامي صفحات يك صفحه error handling بنويسم
نميخوام براي تك تك كدهام try catch بنويسم
ميخواستم ببينم راهي هست كه همه error ها تمامي صفحات در جاي خاصي دريافت كنم و پيغام خودم را به كاربر نمايش دهم
دقيق مثل سايت برنامه نويس كه اگر يك صفحه ارور دهد يك صفحه پابليك نمايش داده مي شود

sokote_bi_payan
دوشنبه 06 دی 1389, 14:01 عصر
به نام خدا
سلام
بله میتونید برای این کار تو web.config این تنظیمات رو انجام بدید.
البته تو IIS هم این تنظیمات هست که خیلی کارآمد تره

Slytherin
دوشنبه 06 دی 1389, 14:04 عصر
من زیاد اطلاعی در مورد برنامه نویسی تحت وب ندارم اما می دونم که هاست ها هم همچین بخشی دارند،
کافیه که صفحه مورد نظرتون رو با صفحه پیشفرض ارور های سایت تعویض کنید...
(اگر اشتباه می کنم ببخشید!)

shaki_phd
دوشنبه 06 دی 1389, 15:41 عصر
ميشه يك مثال بزنيد ؟
بعدش هم اينكه من ميخوام تو سايتم يك لاگي از آن خطاي بوجود آمده در ديتابيس ثبت كنم آيا با اين كار امكان دسترسي به خطاي پيش آمده است

shaki_phd
شنبه 09 بهمن 1389, 12:05 عصر
يعني كسي در اين زمينه كاري نكرده
يعني من مجبورم براي همه قسمتهاي كدم try catch بنويسم
يعني نميشه در يك قسمت (حالا شايد مثل global.ascx) تمامي error ها را catch كنم
اگر ميشه خواهشن يك مثال بزنيد
شادزي

A.S.Roma
شنبه 09 بهمن 1389, 13:36 عصر
فایل Gloabal.asax ایونت Application_Error ...
اونجا می تونید هر کاری کنید ( اعم از قبت در دیتابیس ... Redirect به یک ErrorPage و ... )

Javad.Kashi
شنبه 09 بهمن 1389, 15:00 عصر
سلام به همه
مقاله یکی از دوستان درباره Error Handling
http://barnamenevis.org/showthread.php?57771

موفق باشید.

Mostafa_Dindar
شنبه 09 بهمن 1389, 16:31 عصر
سلام ,

به طور کلی ما 2 نوع خطا داریم , خطاهای مدیریت شده (Handled Exception)و خطاهای مدیریت نشده (Unhandled exception).


یکسری جاها که با با استفاده از بلاک Try-Catch خطا یا Exception رو میگیریم در نتیجه خودمون اون رو هندل میکنیم و پیام متناسب به کاربر نشان میدهیم
و بعضا مواردی که اون Exception رو ما مدیریت نکرده ایم و طبیعتا باعث رخ دادن یک خطای Unhandled Exception میشود .

در صورتی که بخواهید در صورت رخ دادن خطاهای Unhandled به صفحه خاصی هدایت شود میتوانیم با Config کردن Web.config اینکار را انجام بدیم :


<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="AccessDenied.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>خوب تا اینجا ما کاربر را به صفحه User Friendly هدایت کردیم ولی اگر بخواهیم توضیحاتی در مورد خطا را نیز لاگ کنیم چندین راه حل وجود دارد .

در رویداد Application_Error که در فایل Global.asax هست میتوانید آن را مدیریت کرده مثلا :

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error in: " + Request.Url.ToString() + "\r\n" +
"Error Message:" + objErr.Message;
// Log the error
MD.Utility.ErrorHandler.WriteError(err);
}
}که شما در بدنه متد WriteError() به هر شکلی که دوست دارید میتوانید آن را لاگ کنید ( در یک فایل متنی , sql و ... )

ولی گزینه دوم استفاده از ASP.NET Health Monitoring (http://www.asp.net/hosting/tutorials/logging-error-details-with-asp-net-health-monitoring-cs)یا Elmah (http://www.asp.net/hosting/tutorials/logging-error-details-with-elmah-cs)هست که Elmah گزینه به مراتب بهتری هست .

و همانطور که مطلعید Elmah برای لاگ کردن خطاهای هندل نشده هست , در صورتی که بخواهید خطاهای مدیریت شده را نیز لاگ کنید هستند افرادی که یک نسخه سفارشی شده از آن تهیه کرده اند که بعنوان نمونه سایت StackOverFlow (http://stackoverflow.com/)نیز از آن استفاده میکند . این نسخه سفارشی شده را میتوانید در اینجا (http://www.codinghorror.com/blog/2009/04/exception-driven-development.html) دنبال کنید .
در این حالت خطاها را به صورت زیر لاگ میکنید :


...
}
catch (Exception ex)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
...

سربلند باشید.

پانوشت :
مطلب آخری را امروز آقای نصیری در بلاگشون (http://vahidnasiri.blogspot.com/)منتشر کردند