كيفية إنشاء التقارير صفحات ASP.NET باستخدام Visual C#.NET خطأ مخصصة

للحصول على إصدار Microsoft Visual Basic.NET من هذه المقالة، راجع
308132 .

تشير هذه المقالة إلى مساحة الاسم Microsoft.NET Framework مكتبة الفئة التالية:
  • System.Diagnostics

في هذه المهمة

ملخص

توضح هذه المقالة كيفية استخدام التعليمات البرمجية Visual C#.NET لملائمة والاستجابة إلى الأخطاء عند حدوثها في ASP.NET. وتحسنت ASP.NET من التقليدية Microsoft Server صفحات النشطة (ASP) خيارات معالجة الأخطاء. في ASP.NET, يمكنك معالجة الأخطاء في عدة مستويات مختلفة في التطبيقات الخاصة بك.

العودة إلى أعلى

الميزات الجديدة في ASP.NET

يوفر ASP.NET العديد من التطورات في كيفية معالجة والاستجابة إلى الأخطاء. في ASP التقليدية، يمكنك التعامل مع أخطاء "On Error Resume Next" (أو كتل حاول الالتقاط في JScript). بدلاً من ذلك، إذا كنت تستخدم Microsoft Internet معلومات Services (IIS) 5.0، يمكنك استخدام كائن ASPError لإنشاء صفحة خطأ مخصص تقارير. ومع ذلك، هذه النهج من حدودها.

يوفر ASP.NET على عدة مستويات، عندها يمكنك معالجة والاستجابة إلى الأخطاء التي قد تحدث عند تشغيل تطبيق ASP.NET. يوفر ASP.NET الطرق الرئيسية الثلاثة تتيح إمكانية ملائمة والاستجابة إلى الأخطاء عند حدوثها: Page_Errorو Application_Errorملف تكوين التطبيق (Web.config).

توضح هذه المقالة كيفية استخدام هذه الميزات الجديدة في تطبيق ASP.NET الخاص بك. على الرغم من أن توضح هذه المقالة كيفية توفير التقرير عن الخطأ العام فيما يتعلق بمباشرة إلى ASP.NET وصفحات خطأ مخصصة، لا يصف هذه المقالة الأخطاء الأخرى معالجة نهج مثل كتلة حاول الالتقاط-أخيرا والنظام استثناء وقت تشغيل اللغة العامة (CLR).

العودة إلى أعلى

كيفية استخدام أسلوب Page_Error

يوفر معالج الحدث Page_Error طريقة لتصيد الأخطاء التي تحدث على مستوى الصفحة. يمكنك ببساطة عرض معلومات الخطأ (كما يفعل نموذج التعليمة البرمجية لمتابعة)، أو يمكنك تسجيل الحدث أو تنفيذ إجراء آخر.

ملاحظة: يعرض هذا المثال معلومات تفصيلية عن الخطأ في المستعرض فقط لأغراض العرض التوضيحي. ستحتاج إلى توخي الحذر عند عرض معلومات تفصيلية للمستخدم النهائي للتطبيق، لا سيما عندما يكون التطبيق قيد التشغيل على شبكة الإنترنت. سيكون إجراء أنسب لعرض رسالة للمستخدم إعلامهم الذي حدث خطأ ومن ثم تسجيل تفاصيل الخطأ المحددة فعلا في سجل الأحداث.

يطرح هذا المثال استثناء فارغة، مما يفرض خطأ في معالج حدث Page_Load . اتبع هذه الخطوات لإنشاء الصفحة الأولى التي سيتم عرض باستخدام معالج الحدث Page_Error .
  1. اتبع هذه الخطوات لإضافة ملف جديد يسمى PageEvent.aspx إلى المشروع الخاص بك:
    1. قم بفتح Microsoft Visual Studio.NET.
    2. في "مستكشف الحلول"، انقر نقراً مزدوجاً فوق عقده المشروع أشر إلى إضافةوثم انقر فوق إضافة نموذج ويب.
    3. في مربع النص الاسم ، اكتب PageEvent.aspx، ومن ثم انقر فوق فتح.
  2. أضف التعليمات البرمجية التالية إلى PageEvent.aspx:
    <script language=C# runat="server">void Page_Load(object sender, System.EventArgs e)
    {
    throw(new ArgumentNullException());
    }

    public void Page_Error(object sender,EventArgs e)
    {
    Exception objErr = Server.GetLastError().GetBaseException();
    string err ="<b>Error Caught in Page_Error event</b><hr><br>" +
    "<br><b>Error in: </b>" + Request.Url.ToString() +
    "<br><b>Error Message: </b>" + objErr.Message.ToString()+
    "<br><b>Stack Trace:</b><br>" +
    objErr.StackTrace.ToString();
    Response.Write(err.ToString());
    Server.ClearError();
    }
    </script>


    ملاحظة: في نموذج التعليمات البرمجية هذه السمة AutoEventWireup لم يتم بشكل صريح تعيين. في حالة عدم وضوح تعيين قيمة السمة AutoEventWireup ، يستخدم في الافتراضي القيمة true . إذا كنت تستخدم Visual Studio.NET لتطوير التطبيقات الخاصة بك، تعين التعليمات البرمجية قالب "نموذج ويب" بوضوح قيمة السمة AutoEventWireup إلى false. يوجد اختلاف هام بين القيمة الافتراضية التي تستخدم ASP.NET، والقيمة الافتراضية التي يعين رمز قالب Visual Studio.NET لهذه السمة. إذا تم تعيين قيمة السمة AutoEventWireup إلى false، معالجات الأحداث التي تم تعريفها في. إطلاق صفحة ASPX. قد يكون مربكاً إذا كنت لا تعرف حول هذه الوظيفة.
  3. من القائمة ملف ، انقر فوق حفظ PageEvent.aspx.
  4. انقر نقراً مزدوجاً فوق الصفحة ومن ثم انقر فوق عرض في مستعرض لتشغيل الصفحة. لاحظ أن طرح الخطأ والإبلاغ عنها وفقا لمواصفات التعليمات البرمجية.
ملاحظة: قد تلاحظ أن يصدر التعليمات البرمجية استدعاء Server.ClearError. يمنع هذا الخطأ من الاستمرار في معالج الحدث Application_Error .

وبالإضافة إلى ذلك، أن تحيط علما السمة أيضا في توجيه الصفحة @ . إذا تم تعيين Inherits ، يجب بناء المشروع قبل الاستعراض إلى الصفحة. في حالة عدم إنشاء المشروع أولاً، تتلقى رسالة الخطأ التالية:
'Project.PageEvent' غير نوع صحيح
العودة إلى أعلى

كيفية استخدام أسلوب Application_Error

مشابهة لمعالج الحدث Page_Error ، يمكنك استخدام معالج الحدث Application_Error لتصيد الأخطاء التي تحدث في التطبيق الخاص بك. سبب هذا الحدث على نطاق واسع للتطبيق، يمكنك تسجيل معلومات خطأ في التطبيق أو معالجة الأخطاء مستوى التطبيق الأخرى التي قد تحدث.

نموذج لمتابعة استناداً إلى نموذج التعليمات البرمجية السابق Page_Error وسيفصل إذا لم كان محاصراً الخطأ في Page_Load في معالج الحدث Page_Error . يتم تحديد معالج الحدث Application_Error في ملف Global.asax التطبيق الخاص بك. ببساطة، الخطوات المذكورة في هذا القسم إنشاء صفحة جديدة لطرح الاستثناء وتصيد الخطأ في معالج الأحداث Application_Error ملف Global.asax كتابة الخطأ في سجل الأحداث. توضح الخطوات التالية كيفية استخدام أسلوب Application_Error :
  1. إضافة ملف جديد يسمى AppEvent.aspx إلى المشروع الخاص بك.
  2. أضف التعليمات البرمجية التالية إلى AppEvent.aspx:
    <script language=C# runat="server">void Page_Load(object sender, System.EventArgs e)
    {
    throw(new ArgumentNullException());
    }
    </script>


    ملاحظة: المعلومات التي تمت مناقشتها في المقطع "Page_Error" حول السمة AutoEventWireup ينطبق أيضا على نموذج التعليمات البرمجية في هذه الخطوة. راجع المعلومات الواردة في القسم "Page_Error" للحصول على مزيد من التفاصيل.
  3. من القائمة ملف ، انقر فوق حفظ AppEvent.aspx.
  4. إضافة معالج الحدث Application_Error في ملف Global.asax لتصيد الخطأ الذي طرح في معالج حدث Page_Load الصفحة AppEvent.aspx. لاحظ أنه يجب إضافة عبارة أخرى استخدام مساحة الاسم التشخيص Global.asax لاستخدام سجل الأحداث.

    أضف التعليمات البرمجية التالية إلى ملف Global.asax:
    using System.Diagnostics;
    protected void Application_Error(object sender, EventArgs e)
    {
    Exception objErr = Server.GetLastError().GetBaseException();
    string err ="Error Caught in Application_Error event\n" +
    "Error in: " + Request.Url.ToString() +
    "\nError Message:" + objErr.Message.ToString()+
    "\nStack Trace:" + objErr.StackTrace.ToString();
    EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    Server.ClearError();
    //additional actions...
    }

  5. حفظ ملف Global.asax.
  6. في Visual Studio.NET, في بنية القائمة، انقر فوق إنشاء.
  7. انقر نقراً مزدوجاً فوق الصفحة ومن ثم انقر فوق عرض في مستعرض. في هذه الحالة تكون الصفحة فارغة، ومع ذلك، يجب أن تلاحظ إضافة إدخال جديد في سجل الأحداث. يجعل هذا النموذج إدخال في سجل "التطبيق"، الذي يمكن الوصول إليه من "عارض الأحداث". بعد تسجيل الخطأ قد تحتاج إلى إعادة توجيه المستخدم إلى صفحة خطأ أخرى أكثر سهولة في الاستخدام، أو تنفيذ بعض إجراءات إضافية إذا لزم الأمر.
العودة إلى أعلى

كيفية استخدام ملف Web.config

إذا لم تتصل Server.ClearError أو معالجة اعتراض الخطأ في معالج الأحداث Application_Error أو Page_Error ، الخطأ استناداً إلى الإعدادات الموجودة في المقطع < customErrors > ملف Web.config. في المقطع < customErrors >، يمكنك تحديد صفحة إعادة توجيه كصفحة أخطاء افتراضية (defaultRedirect) أو تحديد لصفحة معينة استناداً إلى رمز خطأ HTTP التي يتم تشغيلها. يمكنك استخدام هذا الأسلوب لتخصيص رسالة الإعلام بالخطأ التي يتلقاها المستخدم.

إذا حدث خطأ التي لم يتم حصرها في أي مستوى من المستويات السابقة في التطبيق الخاص بك، يتم عرض هذه الصفحة مخصصة. يوضح هذا القسم كيفية تعديل ملف Global.asax بحيث لا يتم استدعاء Server.ClearError . وكنتيجة لذلك، تتم معالجة الخطأ في ملف Web.config كالنقطة الأخيرة تصيد الخطأ.
  1. فتح ملف Global.asax من المثال السابق.
  2. التعليق خط Server.ClearError للتأكد من أن أسطح خطأ في ملف Web.config.
  3. حفظ التغييرات إلى Global.asax. الآن يجب أن يظهر الرمز مشابهة لما يلي:
    using System.Diagnostics;
    protected void Application_Error(object sender, EventArgs e)
    {
    Exception objErr = Server.GetLastError().GetBaseException();
    string err ="Error Caught in Application_Error event\n" +
    "Error in: " + Request.Url.ToString() +
    "\nError Message:" + objErr.Message.ToString() +
    "\nStack Trace:" + objErr.StackTrace.ToString();
    EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    //Server.ClearError();
    //additional actions...
    }

  4. أضف التعليمات البرمجية التالية إلى المقطع < customErrors > لإعادة توجيه المستخدم إلى صفحة مخصصة:
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"></customErrors>

    ملاحظة: يجب تعديل مسار الملف في السمة defaultRedirect حيث أنها تشير أسماء الخادم وتطبيق ويب ذات الصلة.
  5. لأنه يتم إرسال الأخطاء التي يتم اعتراض على هذا المستوى إلى صفحة أخطاء افتراضية، يجب عليك إنشاء صفحة خطأ المسمى ErrorStatus.htm. ضع في اعتبارك أن كنت تستخدم هذا الأسلوب للتحكم في ما يتم تقديمها للمستخدم، حيث يستخدم هذا المثال صفحة.htm صفحة خطأ. أضف التعليمات البرمجية التالية إلى ErrorStatus.htm:
    <HTML><HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
    <b>Custom Error page!</b>
    <br>
    You have been redirected here from the <customErrors> section of the
    Web.config file.
    </BODY>
    </HTML>

  6. لاختبار التعليمة البرمجية حفظ الملفات بناء المشروع ومن ثم عرض AppEvent.aspx في المستعرض. لاحظ أنه عندما يتم طرح الخطأ، تتم إعادة توجيهك إلى الصفحة ErrorStatus.htm.
على الرغم من أنه يمكنك الرجوع صفحة أخطاء افتراضية في قيمة السمة defaultRedirect في قسم < customErrors >، يمكنك أيضا تحديد صفحة معينة لإعادة توجيه على رمز خطأ HTTP التي يتم تشغيلها. يسمح العنصر < خطأ > التابع لهذا الخيار. على سبيل المثال:
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"><error statusCode="404" redirect="filenotfound.htm" />
</customErrors>

ملاحظة: الصفحة المحدد في defaultRedirect قسم < customErrors > ملف.htm. أنا

لاحظ أن هذا القسم < customErrors > يتضمن سمة وضع تعيين إلى تشغيل. استخدام سمة الوضع للتحكم في كيفية حدوث إعادة توجيه خطأ. على سبيل المثال، إذا كنت تقوم بتطوير التطبيق، يمكنك غالباً تريد مشاهدة رسائل خطأ ASP.NET الفعلي ولا تريد أن يتم إعادة توجيهك إلى صفحة الخطأ أكثر سهولة في الاستخدام. تتضمن سمة وضع الإعدادات التالية:
  • على: الاستثناءات غير المعالجة بإعادة توجيه المستخدم إلى الصفحة المحددة defaultRedirect . يتم استخدام هذا الوضع أساسا في الإنتاج.
  • إيقاف: المستخدمين تلقي معلومات الاستثناء، ولم تتم إعادة توجيهك إلى صفحة defaultRedirect . يتم استخدام هذا الوضع أساسا في التنمية.
  • ريموتيونلي: فقط المستخدمين الذين الوصول إلى موقع على الكمبيوتر المحلي (باستخدام localhost) تلقي معلومات الاستثناء. يتم إعادة توجيه كافة المستخدمين إلى صفحة defaultRedirect . يتم استخدام هذا الوضع أساسا لتصحيح الأخطاء.
العودة إلى أعلى

استكشاف الأخطاء وإصلاحها

في التثبيت الافتراضي الخاص به على نظام التشغيل Microsoft Windows 2000 ونظام التشغيل Windows XP، ASP.NET تشغيل التعليمات البرمجية للتطبيق ويب في عملية تابعة. هوية هذه العملية افتراضية تسمى حساب ASPNET حساب محلي غير المتمتعين بامتيازات. في إصدارات بيتا من ASP.NET، هوية العملية كان نظام حساب إداري فعال بامتيازات كثيرة على الجهاز.


يعمل ASP.NET التثبيت الافتراضي ل Windows Server 2003 (IIS 6)، التعليمات البرمجية للتطبيق ويب في عملية عامل. هوية هذه العملية الافتراضية لحساب NetworkService تسمى محدود.

لمزيد من المعلومات حول هذا التغيير وكيف يمكن أن تؤثر في تشغيل التعليمات البرمجية في هذه المقالة، وأخرى تعليمات برمجية أخرى قد تحتاج حقوق وصول إضافية، قم بزيارة مواقع الويب التالية:
الإصدار 1 تغيير الأمان ل Microsoft.NET Framework
http://msdn2.microsoft.com/en-us/library/ms994923.aspx
العودة إلى أعلى

المراجع

خصائص

رقم الموضوع: 306355 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

Microsoft ASP.NET 1.0, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft ASP.NET 1.1, Microsoft Visual C# .NET 2003 Standard Edition

تعليقات