میزبانی وب

ساخت خطاهای سفارشی دات نت از طریق ماژول Dot NET Error Pages در IIS 7.5

در این مقاله، ما به بررسی تفصیلی ساخت صفحات خطای سفارشی (Custom-Error Pages) با استفاده از فایل پیکربندی(Configuration File) برنامه در زبان برنامه نویسی ASP.NET می پردازیم. در ASP، تنظیمات صفحات خطای سفارشی مستلزم پیکربندی IIS می باشد. فایل web.config  به ازای هر برنامه ASP.NET ایجاد می‌شود. این فایل را می‌توان جهت افزودن صفحات خطای سفارشی برای برنامه استفاده کرد.

در تمام برنامه های کاربردی وب (Web Applications) دو نوع خطا وجود دارد:

  • خطاهای شرطی (Conditional).
  • خطاهای غیر شرطی (Unconditional).

خطاهای شرطی مربوط به قوانین منطقی حرفه هستند در حالیکه خطاهای غیر شرطی ممکن است بواسطه کاهش سرعت شبکه، از دسترس خارج شدن پایگاه داده، از دسترس خارج شدن سرور و … رخ دهند. ASP.NET تکنیکهای گوناگونی جهت مقابله با خطاهای مذکور ارائه می دهد. این مقاله به بررسی فایل پیکربندی وب (Web Configuration) جهت بیان خطا و استفاده از سفارشی کردن خطا می پردازد.

Web.Config فایل

در ASP، خصوصیات پیکربندی (Configuration) برنامه ها در فرمت داده های باینری کد شده  ذخیره می شوند. آنها می توانند یا از طریق اسکریپت و یا از طریق کنسول IIS Manager در دسترس قرار بگیرند. برای مثال، اگر وبسایت ما روی یک سرور شرکت متفرقه میزبانی شود و ما بخواهیم صفحات خطای سفارشی برای وبسایتمان تهیه کنیم، لازم است که با آن شرکت تماس بگیریم و (با پرداخت هزینه) از آنها بخواهیم که وبسایتمان را با استفاده از IIS پیکربندی کنند. بنابراین یکی از مشکلات اصلی با این روش پیکربندی، عدم قابلیت انتقال است. هنگامیکه ویژگی های پیکربندی (Configuration Attributes) برنامه های ASP از یک کامپیوتر به کامپیوتر دیگری که از ابزار مدیریتی IIS (یا IIS Manager Tools) استفاده می کند انتقال داده می شود، می بایستی دوباره ایجاد و بصورت دستی قرار داده شوند. مشکل فوق با ظهور ASP.NET مرتفع شده است. ASP.NET یک رویکرد پیکربندی مبتنی بر برنامه نویسی XML را اتخاذ کرده است. ASP.NET دو فایل پیکربندی (Configuration) ارائه می دهد: یکی فایل machine.config و دیگری فایل web.config.

فایل machine.config در واقع یک فایل پیکربندی سرور است که برای همه ی برنامه هایASP.NET مشترک است و بطور پیش فرض، در فولدر config واقع در مسیر /WinNT/Microsoft.NET/Framework/version/config  نصب شده است. در مسیر مذکور منظور از version همان نسخه ی net framework. می باشد. از سوی دیگر web.config یک فایل پیکربندی برای برنامه های شخصی است. هر برنامه ASP.NET دارای یک فایل web.config است که در دایرکتوری wwwroot قرار داده شده است. این فایل ویژگی های برنامه وبی را که با آن در ارتباط است، مدیریت می کند. از آنجا که machine.config برای همه برنامه های ASP.NET مشترک است، تنها در شرایط محیطی بسیار خاص مستلزم تغییر می باشد. این فایل web.config است که در پیکربندی برنامه ها بکار گماشته می شود. فایل web.config را می توان برای تهیه صفحات خطای سفارشی برنامه استفاده کرد.

[irp posts=”۴۲۶۸″ name=”asp.net چیست و همه چیز درباره کاربرد آن”]

برچسب های خطا در web.config

آن قسمت از فایل web.config که به سفارشی کردن خطا مربوط می شود، در زیر نشان داده شده است.

[pre]

<configuration>

<system.web>

<customErrors>

<!—این قسمت را اصلاح کنید-- >

</customErrors>

</system.web>

</configuration>

[/pre]

عنصر customErrors می بایستی برای هر گونه از خطاهای برنامه اصلاح شود. این عنصر دارای یک ویژگی به نام ”Mode” است که وضعیت (Mode) خطا را برای هر برنامه مشخص می نماید. حالت خطا می‌تواند On یا Off یا RemoteOnly باشد که توضیح هر کدام در زیر آمده است:

 

  • <customErrors mode=”On”>… </customErrors> : تنها پیام‌های خطای کاربر پسند(User-friendly) را نمایش می‌دهد. (متن خطای پیش‌فرض را نمایش نمی دهد.)
  • <customErrors mode=”Off”>… </customErrors> : تنها پیام‌های خطای پیش‌فرض را نمایش می دهد. (پیام‌های خطای کاربر پسند را نمایش نمی‌دهد.)
  • <customErrors mode=”RemoteOnly”>… </customErrors> :پیام های خطای پیش‌فرض / تفصیلی را برای کاربران سیستم وب سرور محلی نمایش می‌دهد. در  این حالت، پیام‌های خطای کاربر پسند  زمانی نمایش داده می شوند که از مکانی دیگر  در دسترس باشند.

 

یک مثال:

یک پروژه با استفاده از VS.NET ساخته و آنرا “CustomErrorApp” بنامید. سپس فایل Web.config ساخته شده برای پروژه را مشاهده نمایید. توجه نمایید که وضعیت customErrors به صورت پیش فرض روی RemoteOnly قرار دارد:

[pre]<CustomErrors mode="RemoteOnly"/>[/pre]

یک وب فرم به نام main.aspx در پروژه ایجاد نمایید. کد زیر را در تابع Page_Load صفحه codebehind قرار بدهید.

[pre]

private void Page_Load (object sender, System.EventArgs e)

}

int a = 0;

int b = 0;

int i = a/b;

{

[/pre]


 

کد فوق یک استثناء تقسیم بر صفر(DivideByZero) را ارسال می نماید. سپس صفحه را کامپایل و اجرا کنید. Browser باز می شود و یک پیام خطای توصیفی دقیق می دهد.

همانطور که ملاحظه کردید، هنگامیکه صفحه ما از کامپیوتر وب سرور محلی و از یک کامپیوتر در جایی دیگر در دسترس قرار گیرد با دو پیام خطای متفاوت مواجه خواهیم شد. این ویژگی وضعیت RemoteOnly، برچسب (Tag) خطای سفارشی را در فایل Web.config بیان می کند. هنگامیکه صفحه ما از کامپیوتر محلی در دسترس قرار می گیرد، RemoteOnly پیام های خطای تفصیلی را نمایش می دهد. بنابراین مدیران و توسعه دهندگانی که بطور نرمال به سرور وب دسترسی دارند، یک گزارش تفصیلی از پیام خطا که بیان کننده ی مکان وقوع خطا و نوع خطا است دریافت می کنند. هنگامیکه صفحه از یک کامپیوتر Remote در دسترس قرار بگیرد، ASP.NET جزئیات خطا را مشخص نمی نماید بلکه تنها خطای زمان اجرا (Runtime) را بیان می کند. اگر ما بخواهیم یک گزارش خطای با جزئیات بیشتر را ببینیم، جدای از مکان دستیابی ما به صفحه وب (که می تواند محلی یا Remote باشد)، می توانیم وضعیت customErrors را به Off تغییر دهیم.

[pre]<customErrors mode="Off"/>[/pre]

در واقع با قرار دادن customErrors به وضعیت Off ، تنها می توانیم صفحات خطای تفصیلی ASP.NET را جدای از مکان دستیابی ما به صفحه وب، مشاهده نماییم.

ویژگی تغییر مسیر (Redirect)

زمانیکه main.aspx بصورت remote اجرا می شود (همانگونه که در شکل ۲ مشاهده نمودید)، پیام خطا بصورت کاربرپسند و تفصیلی نخواهد بود. برای تغییر مسیر به یک صفحه خطای کاربرپسند، بایستی از ویژگی “defaultRedirect” در برچسب CustomErrors استفاده نمود. از ویژگی defaultRedirect تنها در وضعیت خطای “RemoteOnly” یا “On” می توان استفاده نمود.

برای مثال یک صفحه خطا با نام error.aspx ایجا کنید که پیام زیر را نمایش دهد:

یک خطا اتفاق افتاده است!

حال بخش CustomErrors را بصورت زیر اصلاح نمایید:

[pre]

<customErrors mode=”RemoteOnly” defaultRedirect=”error.aspx“/>

[/pre]

هنگامیکه صفحه main.aspx از کامپیوتر سرور محلی اجرا می شود، ما همچنان صفحه ی مشابه شکل ۱ را دریافت خواهیم نمود. اگر از کامپیوتر Remote صفحه فوق را ببینیم، پیام خطای “یک خطا اتفاق افتاده است!” را دریافت می کنیم. در صورت قرار دادن customErrors در وضعیت On، صفحه خطای کاربرپسند ما برای هردو سیستم محلی و Remote قابل مشاهده خواهد بود.

[pre]

</”customErrors mode=”On” defaultRedirect=”error.aspx>

[/pre]

ممکن است فایل مقصد (که به آن تغییر مسیر داده شده است)، یک فایل ASP یا ASPX یا حتی یک فایل ساده ی HTML باشد.

بخش customErrors تنها برای درخواست های ASP.NET عمل می کند. اگر در زمان اجرای error.aspx خطایی اتفاق بیفتد، صفحه خطای بیان شده توسط IIS همچنان ظاهر خواهد شد که برای سفارشی کردن آن بایستی از طریق IIS اقدام کنیم. با اصلاح صفحه error.aspx جهت نمایش رشته جستار(query string) عبوری، قادر به دریافت اطلاعات نمایش داده شده

 URL حاوی یک رشته جستار (querystring)   با پارامتر “aspxerrorpath” است که منبع خطا را مشخص می کند. ظاهرا این تنها اطلاعات در دسترس از صفحه تغییر مسیر داده شده است. نوع و جزئیات خطایی که رویداده است، برای صفحات خطا بطور آماده در دسترس نیستند. به هر روی، می توان به راحتی این اطلاعات را توسط یک Error Handler بر روی یک صفحه مستعد خطا اجرا نمود و یا Application_Error را بر روی صفحه ی global.asax.cs اجرا نمود. در اینجا به شما نشان می دهیم که چگونه می توانید اطلاعات خطا را در main.aspx بدست آوریم. شما می توانید این اطلاعات را بصورت log ذخیره کنید یا آنرا از طریق ایمیل به مدیر شبکه ارسال فرمایید. در  فایل  main.aspx  همانطور که در  زیر مشاهده می نمایید،  یک رسیدگی کننده ی خطا (Error Handler) برای استثناهای رسیدگی نشده (Unhandled Exceptions) اجرا می شود.

پرداختن به خطاهای بخصوص

  ما می‌توانیم صفحه های خطای جداگانه ای را برای انواع گوناگون خطاهای  HTTP ایجاد کنیم. برای مثال ، خطای HTTP 404 که به پیدا نشدن صفحه اشاره دارد و یا خطای HTTP 403 که خطای عدم دسترسی می‌باشد را می‌توان با شیوه‌های گوناگونی رسیدگی کرد. امر فوق با استفاده از اضافه کردن عناصر <error> به عنصر customErrors میسر می شود. برچسب‌های خطا در بر گیرنده ی دو ویژگی (Attribute) هستند:

  • statusCode : کد وضعیت خطا مانند، ۴۰۴، ۴۰۳، ۵۰۰ می‌باشد.
  • redirect : صفحه ی تغییر مسیر داده شده است.

برای کسب اطلاعات بیشتر در حوزه خطای ۴۰۳ چیست به شما پیشنهاد می شود مقاله ما را مطالعه نمایید.

بخش customErrors مانند کد زیر خواهد شد:

[pre]

</"customErrors mode="On" defaultRedirect="error.aspx>

</"error statusCode="404" redirect="error404.aspx>

</"error statusCode="500" redirect="error500.aspx>

<customErrors/>

[/pre]

بسته به نوع وقوع، صفحه ی خطای مناسب ارسال می شود. اگر خطایی رخ دهد و کد وضعیت خطای آن  زیر ۴۰۴ یا ۵۰۰ باشد، صفحه ی خطای پیش‌فرض معین شده (که در این مثال error.aspx است) نمایش داده می شود.

چه زمانی باید از فایل web.config استفاده نمود؟

همانطور که پیشتر اشاره شد، راه ‌های گوناگونی در رسیدگی به خطاها در زبان برنامه نویسی ASP.NET وجود دارد. با استفاده از بلوک های استثناء try/catch (Exception try/catch Blocks) یا با استفاده از فایل global.asax بهتر میتوان خطاهای شرطی را رسیدگی نمود. ابتدا رسیدگی کنندگان خطای مذکور فراخوانی می‌شوند. بخش web.config بعنوان آخرین مکانیزم دفاعی برای خطاهای رسیدگی شده در برنامه ی ASP.NET است. گر چه چنین تکنیک های رسیدگی خطای کارآمدی موجود می‌باشند، ولی web.config ظاهراً بهترین راه برای پرداختن به خطاهای غیر شرطی است. Web.config بهترین روش برای ارائه صفحات خطای سفارشی است.

[irp posts=”۶۶۶۸″ name=”سفارشی سازی صفحه های خطای وب سایت از طریق ماژول Error Pages”]

ایران هاست

مشخصات مدیر

دیدگاهتان را بنویسید

نوشته های مشابه

دکمه بازگشت به بالا