Frage

Nach diesem MSDN-Artikel über Medium vertrauen unter Medium-Trust:

  

ist FileIOPermission beschränkt. Dies   Mittel können Sie nur Zugriff auf Dateien in   Ihre Anwendung der virtuelle Verzeichnis der   Hierarchie. Ihre Anwendung wird nicht gewährt   Lesen, Schreiben, Anhängen und PathDiscovery   Berechtigungen für Ihre Anwendung   virtuelle Verzeichnishierarchie.

Doch für meinen aktuellen Hosting-Provider führt Anwendungen unter mittel Vertrauen und wenn ich versuche, eine Datei in der Anwendung des Stammordner zu lesen / schreiben, ich habe einen access to path 'myfile.xml' denied Fehler.

Diese Datei gelesen wird, das folgende Stück Code mit

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

Update-Full-Fehler:

  

Zugriff auf den Pfad   'C: \ WebSites \ mywebsite \ myfile.xml' IS   verweigert.

     

Beschreibung: Eine nicht behandelte Ausnahme   während der Ausführung des aufgetretenen   aktuelle Web-Anfrage. Bitte lesen Sie die   Stack-Trace für weitere Informationen über   der Fehler und wo sie ihren Ursprung in   der Code.

     

Ausnahmedetails:   System.UnauthorizedAccessException:   Zugriff auf den Pfad   'C: \ WebSites \ mywebsite \ myfile.xml' IS   verweigert.

     

ASP.NET ist nicht zugangsberechtigt   die angeforderte Ressource. Erwägen   Vergabe von Zugriffsrechten auf die Ressource   auf die ASP.NET-Anforderung Identität.   ASP.NET hat eine Basis-Prozessidentität   (Typischerweise {MACHINE} \ ASPNET auf IIS 5   oder Netzwerkdienst auf IIS 6 und IIS 7,   und der konfigurierte Anwendungspool   Identität auf IIS 7.5), die, wenn verwendet wird,   die Anwendung Identitätswechsel nicht.   Wenn die Anwendung Identitätswechsel   über,   die Identität der anonym   Benutzer (typischerweise IUSR_MACHINENAME) oder   die authentifizierte Anforderung Benutzer.

     

Um ASP.NET Zugriff auf eine Datei zu gewähren,   Rechtsklick auf die Datei im Explorer,   wählen Sie „Eigenschaften“ und wählen Sie die   Registerkarte Sicherheit. Klicken Sie auf „Hinzufügen“, um hinzuzufügen, die   entsprechende Benutzer oder eine Gruppe. Markieren   das ASP.NET-Konto, und überprüfen Sie die   Boxen für den gewünschten Zugriff.

     

Quellfehler:

     

Es wurde eine nicht behandelte Ausnahme erzeugt   während der Ausführung der aktuellen   Web-Anfrage. Informationen über die   Ursprung und die Position der Ausnahme   werden kann, mit der Ausnahme identifiziert   Stack-Trace.

     

Stack-Trace:

     

[UnauthorizedAccessException: Zugriff   auf den Weg   'C: \ WebSites \ mywebsite \ myfile.xml' IS   verweigert.]
  System.IO .__ Error.WinIOError (Int32   errorcode, String maybeFullPath)   +12892935 System.IO.FileStream.Init (String Pfad,   Filemode-Modus, Fileaccess-Zugang,   Int32 Rechte, Boolean useRights,   Fileshare Aktie, Int32 buffer,   Fileoptions Optionen,   SECURITY_ATTRIBUTES secAttrs, String   msgPath, Boolean bFromProxy, Boolean   useLongPath) 2481
  System.IO.FileStream..ctor (String   Pfad, Filemode-Modus, Fileaccess   Zugang, Fileshare Aktie, Int32   buffer, Fileoptions Optionen,   String msgPath, Boolean bFromProxy)   +229 System.IO.FileStream..ctor (String   Pfad, Filemode-Modus, Fileaccess   Zugang, teilen Fileshare) +102
  System.Xml.XmlWriterSettings.CreateWriter (String   output) +5224496
  System.Xml.Linq.XElement.Save (String   filename, Saveoptions-Optionen) +108
  mesoBoard.Services.SiteConfig.UpdateCache ()   1971 mesoBoard.Web.MvcApplication.OnApplicationStarted ()   +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start ()   +604

     

[Httpexception (0x80004005): Der Zugang zu   der Weg   'C: \ WebSites \ mywebsite \ myfile.xml' IS   verweigert.]
  System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (Httpcontext   Kontext, Httpapplication app) +3985477   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr   appContext, Httpcontext Kontext,   Method [] Handler) +191
  System.Web.HttpApplication.InitSpecial (HttpApplicationState   Zustand, Method [] Handler, IntPtr   appContext, Httpcontext context) +325   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr   appContext, Httpcontext context) +407   System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr   appContext) +375

     

[Httpexception (0x80004005): Der Zugang zu   der Weg   'C: \ WebSites \ mywebsite \ myfile.xml' IS   verweigert.]
  System.Web.HttpRuntime.FirstRequestInit (Httpcontext   Kontext) +11524352
  System.Web.HttpRuntime.EnsureFirstRequestInit (Httpcontext   Kontext) +141
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest   wr, Httpcontext context) +4782309

War es hilfreich?

Lösung

Sie müssen sicherstellen, dass das Benutzerkonto des Application Pool läuft auf der Website gelesen hat / Schreibzugriff auf die Datei / Ordner. Standardmäßig, ich glaube, Sie Leseberechtigungen haben sollten, aber keine Schreibrechte. Auch aus Gründen der Sicherheit, könnte es eine gute Idee sein, die Datei aus dem Ordner Wwwroot in etwas zu bewegen, die nicht korrupt gesamte Anwendung.

  

webdir / data
  webdir / data / myfile.xml

     

webdir / wwwroot
  webdir / wwwroot / default.aspx

Andere Tipps

Ihre IO Erlaubnis klingt wie es ist nur eine Erlaubnis Problem mit Ihrer Datei. Ich weiß, was, wenn ich eine Datei auf meine Hosting-Provider laden, ich Login auf ihre Bedienfeld habe und manuell den IIS-Konto Schreibzugriff auf sie gibt, als Lesezugriff die einzige Berechtigung automatisch gewährt wird.

Auf einer anderen Anmerkung, der Speicherort Ihrer XML-Datei stellt ein Sicherheitsproblem. Versuchen Sie, die Datei im „~ / App_Data /“ Ordner setzen, ist es ein besonderes .NET Ordner, als Ihre Datenordner mehr eingeschränkt wird - im Moment habe ich zu www.yoursite.com/data/myfile.xml gehen könnte und herunterladen, während eine Datei in den Ordner App_Data nicht über das Internet heruntergeladen werden kann.

Was ist der Ordner App_Data verwendet für in Visual Studio?

Sie haben die XElement-Klasse. Der Namensraum „System.Xml.Linq“ wird wahrscheinlich nicht in Ihrer Hosting „mittlere Ebene“ Konfiguration erlaubt. So verwenden Linq in Vertrauen mittleren Ebene, folgen Sie bitte den folgenden Verfahren

Medium Trust gibt an, dass die Anwendung nur Zugriff auf den $ AppDir. Sie können Medium Vertrauen Ebene, um zusätzlichen Zugriff auf das Medium Vertrauen durch Veränderung der FileIOPermission um andere Verzeichnisse als $ AppDir anpassen. Allerdings fand ich, dass, wenn Sie Server.MapPath nennen ( „/“) auch unter einer angepassten Medium Trust-Ebene, dann werden Sie eine Ausnahme „Antrag auf Genehmigung des Typs‚System.Security.Permissions.FileIOPermission erhalten, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' ist fehlgeschlagen "

Es ist meine Theorie, dass dies liegt daran, dass Sie den Zugriff auf das Dateisystem außerhalb der von dem $ AppDir fordern“. Wir haben am Ende, um alle Anrufe zu Server.MapPath () von unseren Web-Anwendungen zu entfernen.

stellte ich eine Website auf GoDaddy und fand, dass die einzige Art, wie ich den Schreibzugriff ermöglichen könnte, ist es für das zu ermöglichen, war ganzes Webstamm aber das könnte die Beschränkung für den Hosting-Plan nur gewesen ?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top