Question

Selon cette article MSDN sur la confiance moyenne , sous moyenne confiance:

  

FileIOPermission est limité. Cette   signifie que vous pouvez uniquement accéder aux fichiers en   répertoire virtuel de votre application   hiérarchie. Votre demande est acceptée   Lire, écrire, Append et PathDiscovery   autorisations pour votre application de   hiérarchie de répertoire virtuel.

Cependant, pour mon fournisseur d'hébergement actuel exécute des applications sous moyenne confiance et quand j'essaie de lire / écrire un fichier dans le dossier racine de l'application, je reçois une erreur de access to path 'myfile.xml' denied.

Ce fichier est lu en utilisant le bit suivant du code

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

mise à jour complète Erreur:

  

L'accès au chemin   'C: \ WebSites \ mywebsite \ myfile.xml' est   nié.

     

Description: Une exception non gérée   produite pendant l'exécution de la   demande web actuelle. S'il vous plaît examiner la   Trace de la pile pour plus d'informations sur   l'erreur et son origine dans   le code.

     

Détails de l'exception:   System.UnauthorizedAccessException:   L'accès au chemin   'C: \ WebSites \ mywebsite \ myfile.xml' est   nié.

     

ASP.NET est pas autorisé à accéder   la ressource demandée. Considérer   accorder des droits d'accès à la ressource   à l'identité de la demande ASP.NET.   ASP.NET a une identité de processus de base   (Généralement {MACHINE} \ ASPNET sur IIS 5   ou service réseau sur IIS 6 et IIS 7,   et le pool d'applications configurées   identité sur IIS 7.5) qui est utilisé si   l'application ne personnifiait.   Si l'application est personnifiait   via ,   l'identité sera l'anonyme   l'utilisateur (typiquement IUSR_MACHINENAME) ou   l'utilisateur demande authentifiée.

     

Pour autoriser l'accès à un fichier ASP.NET,   clic droit sur le fichier dans l'Explorateur,   choisissez « Propriétés » et sélectionnez la   onglet Sécurité. Cliquez sur « Ajouter » pour ajouter le   utilisateur ou groupe approprié. Surligner   le compte ASP.NET, et vérifiez la   Les boîtes pour l'accès souhaité.

     

Erreur source:

     

Une exception non gérée a été générée   lors de l'exécution du courant   demande Web. Les informations concernant la   origine et l'emplacement de l'exception   peuvent être identifiés à l'aide l'exception   Trace de la pile ci-dessous.

     

Trace de la pile:

     

[UnauthorizedAccessException: Accès   au trajet   'C: \ WebSites \ mywebsite \ myfile.xml' est   nié.]
  System.IO .__ Error.WinIOError (Int32   errorCode, String maybeFullPath)   +12892935 System.IO.FileStream.Init (chemin String,   le mode FileMode, accès FileAccess,   droits Int32, useRights booléennes,   part FileShare, Int32 bufferSize,   Options FileOptions,   SECURITY_ATTRIBUTES secAttrs, String   msgPath, Boolean bFromProxy, Boolean   useLongPath) 2481
  System.IO.FileStream..ctor (String   chemin, le mode FileMode, FileAccess   accès, part FileShare, Int32   bufferSize, options FileOptions,   Chaîne msgPath, Boolean bFromProxy)   +229 System.IO.FileStream..ctor (String   chemin, le mode FileMode, FileAccess   accès, part FileShare)
+102   System.Xml.XmlWriterSettings.CreateWriter (String   outputFileName) +5224496
  System.Xml.Linq.XElement.Save (String   fileName, options SaveOptions) +108
  mesoBoard.Services.SiteConfig.UpdateCache ()   1.971 mesoBoard.Web.MvcApplication.OnApplicationStarted ()   62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start ()   +604

     

[HttpException (0x80004005): L'accès à   le chemin   'C: \ WebSites \ mywebsite \ myfile.xml' est   nié.]
  System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext   contexte, HttpApplication app) +3985477   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr   appContext, contexte HttpContext,   MethodInfo [] gestionnaires)
+191   System.Web.HttpApplication.InitSpecial (HttpApplicationState   Etat, MethodInfo [] Chariot, IntPtr   appContext, HttpContext contexte) +325   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr   appContext, HttpContext contexte) +407   System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr   appContext) 375

     

[HttpException (0x80004005): L'accès à   le chemin   'C: \ WebSites \ mywebsite \ myfile.xml' est   nié.]
  System.Web.HttpRuntime.FirstRequestInit (HttpContext   contexte) +11524352
  System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext   contexte)
+141   System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest   wr, HttpContext contexte) +4782309

Était-ce utile?

La solution

Vous devez vous assurer que le compte utilisateur du pool d'applications en cours d'exécution du site a autorisations de lecture / écriture dans le fichier / dossier. Par défaut, je pense que vous devriez avoir des autorisations de lecture, mais les autorisations pas écrire. En outre, pour des raisons de sécurité, il pourrait être une bonne idée de déplacer ce fichier sur le dossier wwwroot dans quelque chose que l'ensemble de votre application ne peut pas corrompre.

  

webdir / données
  webdir / data / myfile.xml

     

webdir / wwwroot
  webdir / wwwroot / default.aspx

Autres conseils

Vos sons d'autorisation IO comme il est juste un problème d'autorisation avec votre dossier. Je sais ce que chaque fois que je télécharge un fichier à mon fournisseur d'hébergement, je dois connecter à leur panneau de commande et donner manuellement l'accès en écriture de compte IIS, comme un accès en lecture est la seule autorisation accordée automatiquement.

Sur une autre note, l'emplacement de votre fichier xml pose un problème de sécurité. Essayez de mettre le fichier dans le « ~ / App_Data / dossier », il est un dossier spécial .NET qui est plus restreint que votre dossier de données - au moment où je pourrais aller à www.yoursite.com/data/myfile.xml et le télécharger, alors que tout fichier dans le dossier App_Data ne peut pas être téléchargé sur le Web.

Qu'est-ce que le dossier App_Data utilisé pour dans Visual studio?

Vous utilisez la classe XElement. L'espace de noms « System.Xml.Linq » est probablement pas autorisé dans votre hébergement configuration « niveau moyen ». Pour utiliser LINQ en fiducie de niveau moyen, s'il vous plaît suivre la procédure suivant

Medium confiance spécifie que l'application n'a accès à la AppDir $. Vous pouvez personnaliser le niveau de confiance moyen d'ajouter un accès supplémentaire à la fiducie moyen en modifiant la FileIOPermission pour inclure d'autres répertoires que $ AppDir. Cependant, je trouve que lorsque vous appelez Server.MapPath ( « / »), même sous une fiducie moyenne sur mesure de niveau, vous obtiendrez une exception « Demande d'autorisation de type « System.Security.Permissions.FileIOPermission, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' a échoué "

Il est ma théorie que ce soit parce que vous demandez l'accès au système de fichiers en dehors du du AppDir $ ». Nous avons fini par avoir à retirer tous les appels à Server.MapPath () de nos applications Web.

Je mis en place un site Web sur GoDaddy et a constaté que la seule façon que je pouvais permettre l'accès en écriture, était pour lui permettre de toute racine web , mais qui aurait pu juste été la restriction de ce plan d'hébergement ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top