تطبيق ASP.NET 2.0 على IIS 5 مما أدى إلى حدوث خطأ (aspnet_wp.exe (PID:XXXX) توقف بشكل غير متوقع.)

StackOverflow https://stackoverflow.com/questions/233478

سؤال

بعد استضافة تطبيق ويب ASP.NET 2.0 على خادم Windows 2000 (IIS 5).لم أتمكن من تصفح موقع الويب.

تم عرض رسالة الخطأ التالية على المتصفح وتمت إضافة ثلاثة إدخالات في سجل الأحداث...

رسالة خطأ في المتصفح

تطبيق الخادم غير متاح تطبيق الويب الذي تحاول الوصول إليه على خادم الويب هذا غير متاح حاليًا.الرجاء الضغط على زر "تحديث" في متصفح الويب الخاص بك لإعادة محاولة طلبك.

إدخالات سجل الأحداث

نوع الحدث:خطأ
مصدر الحدث:أسب.نت 2.0.50727.0
فئة الحدث:لا أحد
معرف الحدث:1000
تاريخ:24/10/2008
وقت:3:45:26 مساءً
مستخدم:لا يوجد
حاسوب:××××
وصف:aspnet_wp.exe (معرف المنتج:XXXX) توقف بشكل غير متوقع.

نوع الحدث:خطأ
مصدر الحدث:أسب.نت 2.0.50727.0
فئة الحدث:لا أحد
معرف الحدث:1088
تاريخ:24/10/2008
وقت:3:45:26 مساءً
مستخدم:لا يوجد
حاسوب:××××
وصف:فشل تنفيذ الطلب بسبب تعذر إنشاء مجال التطبيق.خطأ:0x80070005 تم رفض الوصول.

نوع الحدث:تحذير
مصدر الحدث:أسب.نت 2.0.50727.0
فئة الحدث:لا أحد
معرف الحدث:1073
تاريخ:24/10/2008
وقت:3:45:26 مساءً
مستخدم:لا يوجد
حاسوب:ويب ديف
وصف:فشل في تهيئة AppDomain:/LM/W3SVC/1/Root/WebApplicationName
استثناء:System.IO.FileLoadException
رسالة:تعذر تحميل الملف أو التجميع "System.Web, Version=2.0.0.0, Culture=محايد, PublicKeyToken=b03f5f7f11d50a3a" أو أحد تبعياته.الدخول محظور.تتبع المكدس:في System.Reflection.Assembly.nLoad (اسم الملف AssemblyName، String codeBase، Evidence AssemblySecurity، Assembly locationHint، StackCrawlMark & ​​StackMark، Boolean throwOnFileNotFound، Boolean forIntrospection)
في System.Reflection.Assembly.InternalLoad (AssemblyName AssemblyRef، Evidence AssemblySecurity، StackCrawlMark & ​​StackMark، Boolean forIntrospection)
في System.Reflection.Assembly.InternalLoad (سلسلة التجميع، Evidence AssemblySecurity، StackCrawlMark & ​​StackMark، Boolean forIntrospection)
في System.Activator.CreateInstance (اسم تجميع السلسلة، اسم نوع السلسلة، تجاهل منطقي، BindingFlags BinderAttr، Binder binder، Object[] args، ثقافة CultureInfo، Object[]activationAttributes، EvidencesecurityInfo، StackCrawlMark & ​​StackMark)
في System.Activator.CreateInstance (اسم تجميع السلسلة، اسم نوع السلسلة)
في System.AppDomain.CreateInstance (اسم تجميع السلسلة، اسم نوع السلسلة)
في System.AppDomain.CreateInstance (اسم تجميع السلسلة، اسم نوع السلسلة)
في System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment (سلسلة معرف التطبيق، IApplicationHost appHost، HostingEnvironmentParameters HostingParameters)
في System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors (سلسلة معرف التطبيق، IApplicationHost appHost، HostingEnvironmentParameters HostingParameters)

أيه أفكار...

** يحرر **

ولماذا يتم طرح System.IO.FileLoadException للوصول إلى تجميع System.Web؟

هل كانت مفيدة؟

المحلول

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

أضفت

  • IUSER_MACHINENAME (حساب ضيف الإنترنت)
  • ASPNET (حساب جهاز ASP.NET)

مع قراءة وتنفيذ, محتويات مجلد قائمة و يقرأ الأذونات.

على الرغم من حل المشكلة، لا يزال لدي بعض الأسئلة

يتضح من إدخال سجل الأحداث الثالث أن ApplicationManager فشل في إنشاء HostingEnvironment الموجود في مجموعة System.Web.

نظرًا لأنه تم طرح FileLoadException لـ System.Web، يبدو أن العملية المنفذة لـ ASP.NET لا يمكنها الوصول إلى مجلد GAC.

لماذا يتم طرح FileLoadException للوصول إلى System.Web؟

نصائح أخرى

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

  1. افتح موجه الأوامر إلى C:\windows\microsoft.net\framework\v2.0.50727
  2. قم بتشغيل الأمر التالي:aspnet_regiis.exe -u
  3. قم بتشغيل الأمر التالي:aspnet_regiis.exe -i

سيؤدي ذلك إلى إلغاء تثبيت ASP.NET وإعادة تثبيته، ومن ثم يجب أن يقوم ذلك بإنشاء الأذونات المناسبة للحساب.

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

أنت تحصل على FileLoadException، ولكن قد يكون هناك OutOfMemoryException أساسي أو ما شابه ذلك وهو في الواقع السبب الجذري لذلك.بدون معرفة ما تحاول تحميله، والكود الموجود بداخله، من المستحيل معرفة السبب الفعلي لمشكلتك.

أول شيء سأفعله لاستبعاد وجود مشكلة في مجموعة التحميل، هو محاولة التفكير فيها في أداة اختبار ومعرفة ما إذا كانت نفس المشكلة ستحدث.إذا كان الأمر كذلك، فالمشكلة تكمن في ملف DLL الذي تحاول تحميله، وليس IIS.

واجهت نفس المشكلة ولم تختف مع aspnet_regiis مع -u و -i واقترح العديد من الآخرين هنا.ولكن بعد أن قمت بتنظيف المجلد "%windir%\Microsoft.NET\Framework\v2.0.50727 emporary ASP.NET Files" ومنحت هذا المجلد أذونات القراءة والكتابة للمستخدم من قسم انتحال الهوية في web.config، اختفت المشكلة.لم يكن كافيًا منح مستخدم ASPNET المحلي تلك الحقوق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top