Error Handling در ASP.NET
پس از بروز خطاء در يك صفحه ، ASP.NET اطلاعات مربوط به خطاء را برای سرويس گيرنده ارسال می نمايد . يك صفحه وب ASP.NET ممكن است در زمان اجراء به يكی از خطاهای زير برخورد نمايد :
• خطاهای پيكربندی : زمانی كه گرامر و يا ساختار فايل web.config نادرست باشد ، ايجاد می گردند .
• خطاهای پارسر : زمانی كه گرامر ASP.NET بر روی يك صفحه نادرست باشد ، ايجاد می گردند .
• خطاهای ترجمه : زمانی كه عبارات و دستورات نوشته شده در صفحات متناسب با گرامر زبان استفاده شده نباشند ، ايجاد می گردند .
• خطاهای زمان اجراء : در زمان اجرای يك صفحه ايجاد می گردند .
پس از بروز يك خطاء ، به صورت پيش فرض اطلاعات موجود در Stack كه حاوی فراخوانی ترتيبی مجموعه ای از روتين ها است ، نمايش داده می شود . در صورتی كه debug mode فعال شده باشد ، ASP.NET شماره خط بروز خطاء در كد منبع را كه باعث بروز خطاء شده است را نمايش خواهد داد . debug mode يك ابزار ارزشمند برای اشكال زدائی برنامه ها میباشد .
فعال كردن debug mode در سطح page : بدين منظور از دايركتيو زير استفاده می گردد :
<%@ Page Debug="true" %> |
فعال كردن debug mode در سطح Application : بدين منظور از فايل Web.config موجود در فهرست ريشه application استفاده می گردد :
<configuration> |
اثرات جانبی فعال كردن debug mode
سفارشی كردن صفحات خطاء
برای فعال كردن خطاهای سفارشی از امكانات موجود در فايل Web.Config استفاده می گردد . كد زير نحوه انجام اين كار را نشان می دهد :
Web.Config |
<configuration> |
پيكربندی فوق باعث نمايش جزئيات خطاء برای سرويس گيرندگان محلی می گردد ولی سرويس گيرندگان از راه دور به يك صفحه خطاء سفارشی هدايت خواهند شد ( DefaultErrorPage.htm ) . صفحه فوق می تواند يك صفحه aspx . نيز باشد .
ASP.NET مسير صفحه ای را كه باعث بروز خطاء شده است را به عنوان يك آرگومان QueryString برای صفحه خطاء ارسال می نمايد(ErrorPage ). در صورتی كه صفحه سفارشی خطاء خود دارای يك خطاء باشد ، يك صفحه خالی برای سرويس گيرندگان از راه دور ارسال می گردد .
DefaultErrorPage.htm |
<%@ Page Language="VB" Description="Error page"%> |
جدول زير خصلت های پيكربندی و مقادير مجاز برای تگ <customeErrors> را نشان می دهد :
خصلت | شرح |
mode | فعال بودن ، غير فعال بودن و يا نمايش صفحه سفارشی خطاء صرفا" برای كامپيوترهای راه دور را مشخص می نمايد. |
defaultRedirect | نام صفحه سفارشی خطاء را مشخص می نمايد . |
با توجه به مقدار نسبت داده شده به خصلت Mode ، در خصوص نمايش خطاء برای سرويس گيرندگان راه دور ، محلی و يا هر دو تصميم گيری می شود . جدول زير مقادیر نسبت داده شده به خصلت Mode و تاثير آن بر روی درخواست های محلی و از راه دور را نشان می دهد .
Mode | درخواست های محلی | درخواست های از راه دور |
On | نمايش صفحه سفارشی خطاء | نمايش صفحه سفارشیخطاء |
Off | نمايش صفحه خطاء ASP.NET | نمايش صفحه خطاء ASP.NET |
RemoteOnly | نمايش صفحه خطاء ASP.NET | نمايش صفحه سفارشیخطاء |
مثال : نحوه استفاده از <customErrors>
• مرحله اول : پيكربندی لازم در فايل Web.Config
Web.Config |
<configuration> |
• مرحله دوم : ايجاد صفحه سفارشی خطاء
DefaultErrorPage.htm |
<html dir=rtl> |
پس از ايجاد مراحل فوق ، در صورت بروز خطاء ( عدم وجود فايل ، بروز اشكال بر روی سرويس دهنده و يا ساير خطاهای متداول در صفحه درخواستی ) ، فايل DefaultErrorPage.htm نمايش داده می شود .
صفحه سفارشی خطاء با نام DefaultErrorPage.htm كه در مثال قبل ايجاد شده بود برای تمامی موارد خطاء نمايش داده می شود . در صورت تمايل می توان برای هر نوع خطاء يك صفحه خاص را طراحی تا پس از بروز خطاء نمايش داده شود . بخش پيكربندی <customErrors> دارای يك تگ داخلی با نام <error> است كه مرتبط با كدهای وضعيت HTTP می باشد .
<configuration> |
جدول زير خصلت ها و مقادير مربوط به تگ <error> را نشان می دهد :
خصلت | شرح |
StatusCode | كد وضعيت خطاء HTTP را كه می بايست توسط صفحه سفارشی خطاء استفاده گردد ، مشخص می نمايد . |
Redirect | آدرس و نام صفحه سفارشی مرتبط با نوع خطاء را كه می بايست پس از بروز خطاء نمايش داده شود را مشخص می نمايد . |
مديريت خطاء از طريق كد برنامه
• Page Level : كلاس پايه page دارای متدی با نام Page_Error است كه می توان آن را در صفحات استفاده نمود .
Page Level |
<script language="VB runat="server"> |
Application Level |
Sub Application_Error(sender As Object, e As EventArgs) |