هناك ثلاثة جوانب لمعالجة الاستثناءات في ASP.NET:
التتبع - تتبع تنفيذ البرنامج على مستوى الصفحة أو مستوى التطبيق.
معالجة الأخطاء - التعامل مع الأخطاء القياسية أو المخصصة على مستوى الصفحة أو التطبيق.
التصحيح - التقدم خلال البرنامج وتعيين نقاط التوقف لتحليل التعليمات البرمجية.
في هذا الفصل، سنناقش التتبع والتعامل. وفي هذا الفصل، سنغطي تصحيح الأخطاء.
لفهم المفاهيم، قم بإنشاء نموذج التطبيق التالي. يحتوي على عنصر تحكم في التسمية وقائمة منسدلة ورابط. تقوم القائمة المنسدلة بتحميل مجموعة من علامات الاقتباس وسيتم عرض الاقتباس المحدد في الملصق أدناه. ويحتوي أيضًا على ارتباط تشعبي يشير إلى ارتباط غير موجود.
<%@ لغة الصفحة = "C#" AutoEventWireup = "true" CodeBehind = "Default.aspx.cs" Inherits = "errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// AR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title> التتبع وتصحيح الأخطاء ومعالجة الأخطاء </title> </head> <body> <form id= "form1" runat = "server"> <div> <asp:Label ID = "lblheading" runat = "server" Text = "التتبع وتصحيح الأخطاء ومعالجة الأخطاء"> </asp:Label> <br /> <br / > <asp:DropDownList ID = "ddlquotes" runat = "server" AutoPostBack = "True" onselectedindexchanged = "ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID = "lblquotes" runat= "server"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="mylink.htm">رابط إلى:</asp:HyperLink> </div> </form> </body></html>
الكود بعد الملف:
فئة جزئية عامة _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quote = { {"الخيال أكثر أهمية من المعرفة."، "ألبرت أينشتاين"}، {"افترض الفضيلة إذا لم تكن تمتلكها" "شكسبير"}، {"لا يمكن للرجل أن يشعر بالراحة دون موافقته"، "مارك توين"}، {"احذر الطبيب الشاب والحلاق العجوز"، "بنيامين فرانكلين"}، {"كل ما يبدأ بالغضب ينتهي بالخجل"، "بنيامين فرانكلين"} }; for (int i=0; i<quotes.GetLength(0 ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quote[i,1])); ddlquotes_SelectedIndexChanged(object sender, EventArgs e) { if (ddlquotes.SelectedIndex!= -1) { lblquotes.Text = String.Format("{0}, اقتباس: {1}"، ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue) } }}
للسماح بالتتبع على مستوى الصفحة، تحتاج إلى تعديل توجيه الصفحة وإضافة سمة تتبع على النحو التالي:
<%@ لغة الصفحة = "C#" AutoEventWireup = "true" CodeBehind = "Default.aspx.cs" Inherits = "errorhandling._Default" Trace = "true" %>
الآن عند تنفيذ الملف، سوف تحصل على معلومات التتبع:
ويقدم المعلومات التالية في الرأس:
معرف الجلسة
رمز الحالة
وقت الطلب
نوع الطلب
ترميز الطلب والاستجابة
في كل مرة يتم طلب الصفحة، يعرض رمز الحالة المرسل من الخادم الاسم ووقت الخطأ، إن وجد. يعرض الجدول التالي رموز حالة HTTP الشائعة:
رقم | يصف |
---|---|
الإخطار(100 - 199) | |
100 | يكمل |
101 | اتفاقية التحويل |
النجاح(200 - 299) | |
200 | نعم |
204 | لا يوجد محتوى |
إعادة التوجيه (300 - 399) | |
301 | التحرك بشكل دائم |
305 | استخدم الوكيل |
307 | إعادة توجيه مؤقتة |
أخطاء من العميل (400 - 499) | |
400 | اقتراح غير جيد |
402 | متطلبات الدفع |
404 | لم يتم العثور عليه |
408 | طلب مهلة |
417 | توقع الفشل |
خطأ من الخادم (500 - 599) | |
500 | خطأ في الخادم الداخلي |
503 | الخدمة غير متوفرة |
505 | إصدار HTTP غير مدعوم |
ضمن معلومات المستوى الأعلى، يوجد سجل تتبع يوفر تفاصيل دورة حياة الصفحة. فهو يوفر الوقت المنقضي بالثواني منذ تهيئة الصفحة.
القسم التالي هو شجرة التحكم، والتي تسرد جميع عناصر التحكم الموجودة على الصفحة بتنسيق هرمي:
الإعلان الأخير في الجلسة والتطبيق هو مجموعة الملخصات وملفات تعريف الارتباط والرؤوس متبوعة بجميع متغيرات الخادم.
تتيح لك كائنات التتبع إضافة معلومات مخصصة لتتبع المخرجات. هناك طريقتان لإكمالهما: طريقة الكتابة وطريقة التحذير.
قم بتغيير معالج الأحداث Page_Load للكشف عن طريقة الكتابة:
protected void Page_Load(object sender, EventArgs e){ Trace.Write("تحميل الصفحة"); if (!IsPostBack) { Trace.Write("عدم النشر مرة أخرى، تحميل الصفحة"); ............. }}
تشغيل لرؤية التأثير:
لاكتشاف طريقة التحذير، فلنفرض بعض رموز الخطأ في معالج الأحداث الذي تم تغييره في الفهرس المحدد:
حاول { int a = 0; int b = 9 / a;}catch (استثناء e){ Trace.Warn("UserAction", "process 9/a", e);}
Try-Catch هو بناء برمجة C#. تحتوي كتلة المحاولة على أي رمز قد يؤدي إلى حدوث خطأ أو لا، وتقوم كتلة الالتقاط بالتقاط الخطأ. عند تشغيل البرنامج، فإنه يرسل تحذيرات في سجل التتبع.
ينطبق التتبع على مستوى التطبيق على جميع الصفحات الموجودة في الموقع. ويتم تنفيذه عن طريق وضع الكود التالي في ملف web.config:
<system.web> <trace Enabled="true" /></system.web>
على الرغم من أن ASP.NET يكتشف كافة أخطاء وقت التشغيل، إلا أنه لا تزال هناك بعض الأخطاء الصغيرة التي لا تزال موجودة. ملاحظة الأخطاء من خلال التتبع هي للمطورين، وليس للمستخدمين.
ولذلك، لمنع حدوث ذلك، يمكنك إضافة إعدادات دقة الخطأ في web.config الخاص بالتطبيق الخاص بك. إنه حل الأخطاء على مستوى التطبيق. على سبيل المثال، يمكنك إضافة التعليمات البرمجية التالية إلى ملف web.config:
<التكوين> <system.web> <customErrors mode = "RemoteOnly" defaultRedirect = "GenericErrorPage.htm"> <error StatusCode = "403" redirect = "NoAccess.htm" /> <errorstatusCode = "404" redirect = "FileNotFound" .htm" /> </customErrors> </system.web><configuration>
بعض السمات المحتملة: - **الوضع:** يسمح أو لا يسمح بصفحات الخطأ المخصصة. لديها ثلاث قيم محتملة: - **On:** عرض صفحة مخصصة. - **إيقاف:** يعرض صفحة خطأ ASP.NET (الصفحة الصفراء) - **remoteOnly:** يعرض الأخطاء المخصصة للعميل، ويعرض أخطاء ASP.NET المحلية. - **defaultRedirect:** يحتوي على عنوان URL للصفحة التي سيتم عرضها في حالة وجود أخطاء لم يتم حلها. من أجل وضع صفحات خطأ مخصصة مختلفة لأنواع أخطاء مختلفة، يتم استخدام العلامات الفرعية، حيث يتم تحديد صفحات خطأ مختلفة بناءً على رمز حالة الخطأ. من أجل تحقيق حل الأخطاء على مستوى الصفحة، يمكن تعديل توجيه الصفحة إلى: `````` نظرًا لأن تصحيح أخطاء ASP.NET يعد موضوعًا مهمًا فيه، فسوف نناقشه بشكل منفصل في الفصل التالي.