أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

يؤدي الاستثناءات غير المعالجة في التطبيقات المستندة إلى ASP.NET إلى إنهاء بشكل غير متوقع في.NET Framework

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

اضغط هنا لرابط المقالة باللغة الانجليزية911816
ملاحظةتنطبق هذه المقالة على Microsoft.NET Framework 2.0 والإصدارات الأحدث على الإطلاق.
الأعراض
عندما يتم طرح استثناء غير معالج في Microsoft تطبيق ASP.NET التي تم إنشاؤها في Microsoft.NET Framework 2.0 أو إصدار أحدث، يتم إنهاء التطبيق بشكل غير متوقع. عند حدوث هذه المشكلة، يتم تسجيل أية معلومات استثناء يجب عليك فهم المشكلة في سجل التطبيق.

ومع ذلك، قد يتم تسجيل رسالة حدث مشابه لما يلي في سجل النظام:

نوع الحدث: تحذير
مصدر الحدث: W3SVC
فئة الحدث: بلا
معرف الحدث: 1009
التاريخ: 28/9/2005
الوقت: 3:18:11
المستخدم: n/A
الكمبيوتر: ملقم IIS
الوصف:
تم إنهاء عملية تخدم تجمع التطبيقات 'DefaultAppPool' بشكل غير متوقع. تم معرف العملية '2548'. رمز إنهاء العملية هو '0xe0434f4d'.

بالإضافة إلى ذلك، قد يتم تسجيل رسالة حدث مشابه لما يلي في سجل التطبيق:

نوع الحدث: خطأ
مصدر الحدث:.NET 2.0 وقت تشغيل الإعلام عن الأخطاء
فئة الحدث: بلا
معرف الحدث: 5000
التاريخ: 28/9/2005
الساعة: 18:02 م
المستخدم: n/A
الكمبيوتر: ملقم IIS
الوصف:
Clr20r3 نوع الحدث، w3wp.exe P1، P2 6.0.3790.1830، 42435be1 ب 3، P4 app_web_7437ep 9, P5 0.0.0.0، 433b1670 P6، P7 9، P8، system.exception P9، P10 الصفري.

السبب
تحدث هذه المشكلة لأنه تم تغيير النهج الافتراضي للاستثناءات غير المعالجة في.NET Framework 2.0 والإصدارات الأحدث. بشكل افتراضي، نهج للاستثناءات غير المعالجة لإنهاء عملية العامل.

في Microsoft.NET Framework 1.1 وفي Microsoft.NET Framework 1.0، تم تجاهل الاستثناءات غير المعالجة على مؤشرات ترابط مدارة. إلا إذا قمت بإرفاق مصحح أخطاء إلى التقاط الاستثناء، قد لا تعرف أي شيء كان خطأ.

يستخدم ASP.NET النهج الافتراضي للاستثناءات غير المعالجة في.NET Framework 2.0 والإصدارات الأحدث. عند طرح استثناء لم تتم معالجته، إنهاء تطبيق ASP.NET شكل غير متوقع.

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

الطريقة الأولى

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

ملاحظة سيتم تسجيل هذه التعليمات البرمجية رسالة تحتوي على نوع حدث خطأ ومصدر الحدث ASP.NET 2.0.50727.0 في سجل التطبيق. لاختبار الوحدة النمطية، طلب صفحة ASP.NET التي تستخدم الأسلوب ThreadPool.QueueUserWorkItem لاستدعاء أسلوب الذي يطرح استثناء غير معالج.
  1. ضع التعليمات البرمجية التالية في ملف namedUnhandledExceptionModule.cs.
    using System;using System.Diagnostics;using System.Globalization;using System.IO;using System.Runtime.InteropServices;using System.Text;using System.Threading;using System.Web; namespace WebMonitor {    public class UnhandledExceptionModule: IHttpModule {        static int _unhandledExceptionCount = 0;        static string _sourceName = null;        static object _initLock = new object();        static bool _initialized = false;        public void Init(HttpApplication app) {            // Do this one time for each AppDomain.            if (!_initialized) {                lock (_initLock) {                    if (!_initialized) {                         string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll");                         if (!File.Exists(webenginePath)) {                            throw new Exception(String.Format(CultureInfo.InvariantCulture,                                                              "Failed to locate webengine.dll at '{0}'.  This module requires .NET Framework 2.0.",                                                               webenginePath));                        }                         FileVersionInfo ver = FileVersionInfo.GetVersionInfo(webenginePath);                        _sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",                                                    ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);                        if (!EventLog.SourceExists(_sourceName)) {                            throw new Exception(String.Format(CultureInfo.InvariantCulture,                                                              "There is no EventLog source named '{0}'. This module requires .NET Framework 2.0.",                                                               _sourceName));                        }                         AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);                         _initialized = true;                    }                }            }        }        public void Dispose() {        }        void OnUnhandledException(object o, UnhandledExceptionEventArgs e) {            // Let this occur one time for each AppDomain.            if (Interlocked.Exchange(ref _unhandledExceptionCount, 1) != 0)                return;            StringBuilder message = new StringBuilder("\r\n\r\nUnhandledException logged by UnhandledExceptionModule.dll:\r\n\r\nappId=");            string appId = (string) AppDomain.CurrentDomain.GetData(".appId");            if (appId != null) {                message.Append(appId);            }                        Exception currentException = null;            for (currentException = (Exception)e.ExceptionObject; currentException != null; currentException = currentException.InnerException) {                message.AppendFormat("\r\n\r\ntype={0}\r\n\r\nmessage={1}\r\n\r\nstack=\r\n{2}\r\n\r\n",                                     currentException.GetType().FullName,                                      currentException.Message,                                     currentException.StackTrace);            }                       EventLog Log = new EventLog();            Log.Source = _sourceName;            Log.WriteEntry(message.ToString(), EventLogEntryType.Error);        }    }}
  2. احفظ الملف UnhandledExceptionModule.cs فولووينجفولدير:
    مايكروسوفت C:\Program 8\VC Visual Studio
  3. فتح في كوماندبرومبت Microsoft Visual Studio 2005.
  4. نوع key.snk-كيلو sn.exe، وإدخال ثينبريس.
  5. نوع csc/t:library/r:system.web.dll,system.dll/keyfile:key.snk UnhandledExceptionModule.cs، ومن ثم بريسينتير.
  6. نوع gacutil.exe/ifUnhandledExceptionModule.dll، ثم اضغط ENTER.
  7. نوع installUnhandledExceptionModule.dll منشئ الصورة الأصلية، ثم اضغط ENTER.
  8. نوع gacutil/lUnhandledExceptionModule، ثم اضغط ENTER لعرض اسم الملف أونهاندليديكسسيبتيونمودولي ثيسترونج.
  9. 9-إضافة التعليمات البرمجية التالية إلى ملف Web.config لتطبيق يستند إلى yourASP.NET.
    <add name="UnhandledExceptionModule" 	type="WebMonitor.UnhandledExceptionModule, <strong name>" />

الطريقة الثانية

تغيير نهج استثناء لم تتم معالجته إلى السلوك الافتراضي الذي يحدث في.NET Framework 1.1 وفي.NET Framework 1.0.

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

لتمكين هذا السلوك الافتراضي، إضافة التعليمات البرمجية التالية إلى الملف Aspnet.config الموجود في المجلد التالي:
%WINDIR%\Microsoft.NET\Framework\v2.0.50727
<configuration>    <runtime>        <legacyUnhandledExceptionPolicy enabled="true" />    </runtime></configuration>
تصريح
يعتبر هذا السلوك حسب التصميم.
معلومات أخرى
لمزيد من المعلومات حول التغييرات في.NET Framework 2.0، انتقل إلى موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
العطل

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 911816 - آخر مراجعة: 10/07/2013 15:36:00 - المراجعة: 2.0

Microsoft .NET Framework 4.5, Microsoft .NET Framework 4.0, Microsoft .NET Framework 3.0, Microsoft .NET Framework 2.0

  • kbtshoot kbfix kbprogramming kbprb kbmt KB911816 KbMtar
تعليقات
tps://c1.microsoft.com/c.gif?DI=4050&did=1&t=">p;did=1&t=">>ody>html>