2013-07-24 2 views
-2

J'ai créé une application Web MVC 4 qui fonctionne bien.My Mysterious App_Data Directory

J'ai ajouté une ligne comme

@if (User.IsInRole("Administrators")) 
{ 
    <td>Entered by</td> 
} 

localement aucun problème. Nettoyez-le ... ou publiez-le (tout ce qui a changé dans le contrôleur) et WHAM !!

Accès refusé la création de sous-répertoire App_Data

Description: Pour des raisons de sécurité, l'identité 'IIS APPPOOL \ ASP.NET v4.0' (en vertu de laquelle cette application Web est en cours d'exécution), ne pas autorisations pour créer le sous-répertoire App_Data dans le répertoire racine de l'application . ASP.NET stocke le fichier de base de données Microsoft SQL Express utilisé pour des services tels que Membership et Profile dans le sous-répertoire App_Data de votre application. Pour accorder les autorisations nécessaires, procédez comme suit: Dans Windows Explorer, accédez au répertoire de votre application. Créer un dossier nommé "App_Data": Cliquez-droit, choisissez "Nouveau" élément de menu, choisissez "Dossier" sous-menu, puis tapez "App_Data" (sans les guillemets). Cliquez avec le bouton droit sur dans le sous-répertoire "App_Data" de votre application et sélectionnez l'élément de menu "Propriétés" dans le menu . Dans la boîte de dialogue "Propriétés" qui s'ouvre, sélectionnez l'onglet "Sécurité".

Cliquez sur Ajouter

Dans les "Entrez les noms des objets à sélectionner", entrez 'IIS APPPOOL \ ASP.NET v4.0' (sans les guillemets).

Cliquez sur OK

Assurez-vous que le nom du compte est sélectionné puis sous Autoriser, cochez Ecrire

Cliquez sur OK

Informations sur la version: Microsoft .NET Framework Version: 4.0.30319; ASP.NET Version: 4.0.30319.272

Quand je vous déconnecter et vous reconnecter à ce site, l'erreur disparaît et que la page fonctionne très bien.

J'utilise le construit dans l'adhésion dirigé vers un serveur local exprimé par le

suivant

Sur LocalHost:

<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial 
Catalog=aspnet-P****aker-2013062000841; 
Integrated Security=SSPI" providerName="System.Data.SqlClient" /> 

sur la production:

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial 
Catalog=aspnet-Prop*****30******1; 
User Id=Pr###A;Password=K###3;" providerName="System.Data.SqlClient" 
xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 
</connectionStrings> 

H Il y a la partie mystérieuse. Il n'y a aucun répertoire App_Data du tout ... et hey ... après tout ... pourquoi devrait-il y avoir eu en premier lieu, je n'utilise pas un, j'ai mon propre abonnement de gestion de serveur.

S'il y a un cœur gentil là-bas, ne vous prêterez pas un doigt d'aide ou deux ou dix.

Répondre

1

Vous utilisez SQL Express, qui crée le fichier de données pour sa base de données au App_Data. Lorsque Entity Framework tente de créer votre base de données en production, vous obtenez cette erreur car le niveau de confiance ne lui permet pas de stocker le fichier de données dans lequel il est défini. Utilisez une instance SQL Server réelle en production. Cela corrigera cette erreur, mais c'est aussi ce que vous faites. N'utilisez pas SQL Express pour autre chose que le développement et les tests.

+0

Mais il n'y a pas de répertoire App_Data? et la page fonctionne finalement après la connexion/déconnexion? – Pinch

+0

Il essaie de * créer * le répertoire. C'est pourquoi ça échoue. –

+0

mais comment expliquez-vous pourquoi cela fonctionne après la déconnexion/retour – Pinch

0

Accédez aux paramètres avancés dans le pool d'applications.

Marque Identité NetworkService

Créer un dossier App_Data et donner accès inscriptible à NetworkService

Ajouter un utilisateur NT AUTHORITY \ NETWORK SERVICE dans votre base de données SQL et donner accès inscriptible sur votre adhésion table.

Encore faut-il deconnexion/pour avoir accès rôle après la publication, tout est débarrassé de l'erreur laid