سؤال

حسب هذا مقالة MSDN حول الثقة المتوسطة, ، تحت المتوسطة:

تم تقييد FileiOpermission. هذا يعني أنه يمكنك الوصول إلى الملفات فقط في التسلسل الهرمي للدليل الظاهري للتطبيق. يتم منح طلبك قراءة أذونات القراءة والكتابة والإلحاق والمسار للتسلسل الهرمي للدليل الافتراضي للتطبيق.

ومع ذلك ، بالنسبة لمزود الاستضافة الحالي الخاص بي ، يقوم مزود الاستضافة الحالي بتشغيل التطبيقات تحت المتوسطة وعندما أحاول قراءة/كتابة ملف في مجلد الجذر للتطبيق ، أحصل على ملف access to path 'myfile.xml' denied خطأ.

تتم قراءة هذا الملف باستخدام الجزء التالي من التعليمات البرمجية

XElement file = XElement.Load(HttpContext.Current.Server.MapPath("~/myfile.xml"));

تحديث الخطأ الكامل:

يتم رفض الوصول إلى المسار 'c: websites myWeboSite myfile.xml'.

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

تفاصيل الاستثناء: System.UnauthorizedAccessException: يتم رفض الوصول إلى المسار "C: websites myWeboSite myfile.xml".

لا يُسمح لـ ASP.NET بالوصول إلى المورد المطلوب. النظر في منح حقوق الوصول إلى المورد لهوية طلب ASP.NET. لدى ASP.NET هوية عملية أساسية (عادةً {machine} ASPNET على IIS 5 أو خدمة الشبكة على IIS 6 و IIS 7 ، وهوية تجمع التطبيقات المكونة على IIS 7.5) التي يتم استخدامها إذا لم ينتحل التطبيق. إذا كان التطبيق الانتحال شخصية ، فستكون الهوية هي المستخدم المجهول (عادةً ما يكون iusr_machinenename) أو مستخدم الطلب المصادق عليه.

لمنح ASP.NET الوصول إلى ملف ، انقر بزر الماوس الأيمن فوق الملف في Explorer ، واختر "الخصائص" وحدد علامة التبويب الأمان. انقر فوق "إضافة" لإضافة المستخدم أو المجموعة المناسبة. قم بتمييز حساب ASP.NET ، وتحقق من مربعات الوصول المطلوب.

خطأ المصدر:

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

تتبع المكدس:

غير مصرح به accessexception: يتم رفض الوصول إلى المسار 'c: websites myWeboSite myfile.xml'.
System.io .__ error.winioError (int32 errorcode ، string leghullpath) +12892935 system.io.filestream.init (مسار السلسلة ، وضع filemode ، وصول fileAccess ، int32 حقوق المستخدمين المنطقيين ، حصة fileshare ، int32 ، خيارات ملف ، String msgpath ، Boolean Bfromproxy ، Boolean Uselongpath) +2481
System.io.io.filestream..ctor (مسار السلسلة ، وضع FileMode ، وصول fileAccess ، مشاركة fileShare ، int32 مخزن المؤسسات ، خيارات fileOptions ، سلسلة msgpath ، Boolean bfromproxy) وصول fileAccess ، مشاركة fileShare) +102
System.xml.xmlWritersettings.CreatewRiter (سلسلة إخراج Filename) +5224496
System.xml.linq.xelement.save (اسم ملف السلسلة ، خيارات SaveOptions) +108
mesoboard.services.siteconfig.updatecache () +1971 mesoboard.web.mvcapplication.onapplicationStarted () +62 ninject.web.mvc.ninjecthttpplication.application_start () +604

httpexception (0x80004005): يتم رفض الوصول إلى المسار 'c: websites myWeboSite myfile.xml'.
system.web.httpapplicationfactory.ensureAppStartCalledForIntegratedMode (context httpcontext ، httpapplication)
system.web.httpapplication.initspecial (httpapplicationstate state ، methodInfo [] معالجات ، intptr appcontext ، httpcontext context) intptr appcontext) +375

httpexception (0x80004005): يتم رفض الوصول إلى المسار 'c: websites myWeboSite myfile.xml'.
System.Web.httpruntime.firstrequestinit (HTTPContext Context) +11524352
System.Web.httpruntime.ensurefirstrequestinit (HTTPContext Context) +141
System.Web.httpruntime.processRequestNotificationPrivate (IIS7WorkerQuest WR ، HTTPContext Context) +4782309

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

المحلول

تحتاج إلى التأكد من أن حساب المستخدم لمجمع التطبيقات الذي يشغل موقع الويب قد قرأ/كتابة أذونات إلى الملف/المجلد. بشكل افتراضي ، أعتقد أنه يجب أن يكون لديك قراءة أذونات ولكن لا تكتب أذونات. أيضًا ، لأسباب أمنية ، قد يكون من الجيد نقل هذا الملف من مجلد wwwroot إلى شيء لا يمكن أن يفسد تطبيقك بالكامل.

webdir/البيانات
WebDir/Data/myfile.xml

WebDir/wwwroot
webdir/wwwroot/default.aspx

نصائح أخرى

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

في ملاحظة أخرى ، يطرح موقع ملف XML الخاص بك مشكلة أمان. حاول وضع الملف في المجلد "~/app_data/" ، إنه مجلد خاص .NET مقيد أكثر من مجلد البيانات الخاص بك - في الوقت الحالي ، يمكنني الذهاب إلى www.yoursite.com/data/myfile.xml وتنزيله ، في حين لا يمكن تنزيل أي ملف في مجلد App_Data عبر الويب.

ما هو مجلد App_Data المستخدم في Visual Studio؟

أنت تستخدم فئة Xelement. من المحتمل ألا يُسمح بمساحة الاسم "System.xml.linq" في تكوين "مستضيف المستوى" الخاص بك. لاستخدام LINQ في ثقة متوسطة المستوى ، يرجى اتباع ما يلي إجراء

تحدد Medium Trust أن التطبيق لديه فقط الوصول إلى appdir $. يمكنك تخصيص مستوى الثقة المتوسطة لإضافة وصول إضافي إلى الثقة المتوسطة عن طريق تغيير FileiOpermission لتضمين الدلائل الأخرى من $ Appdir. ومع ذلك ، فقد وجدت أنه عندما تتصل بـ server.mappath ("/") تحت مستوى ثقة متوسطة مخصصة ، ستحصل على استثناء "للحصول على إذن من type. 4.0.0.0 ، الثقافة = محايد ، publickeytoken = B77A5C561934E089 'فشل "

إن نظريتي هي أنك تطلب الوصول إلى نظام الملفات خارج $ appdir ". انتهى بنا الأمر إلى إزالة جميع المكالمات إلى server.mappath () من تطبيقات الويب الخاصة بنا.

أنشأت موقعًا إلكترونيًا على Godaddy ووجدت أن الطريقة الوحيدة التي يمكنني من خلالها تمكين الوصول إلى الكتابة ، هي تمكينها من أجل جذر الويب كله ولكن قد يكون ذلك مجرد قيود على خطة الاستضافة هذه؟

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