web-dev-qa-db-fra.com

SimpleMembershipProvider ne fonctionne pas

J'ai démarré un nouveau projet Internet avec VS2012 et j'essaie de restructurer un peu mon projet et je n'arrive pas à maintenir le fonctionnement de SimpleMemberhsipProvider. Fondamentalement, tout ce que j'ai fait est de déplacer les objets de modèles dans un projet principal avec quelques autres éléments. J'ai implémenté Ninject et j'essaie d'abstraire un peu Entity en utilisant un modèle de référentiel pour obtenir mes données. Je n'ai vraiment pas l'impression d'avoir beaucoup changé avec le projet actuel, mais pour une raison quelconque, lorsque je lance l'application, je reçois maintenant:

{"La fonctionnalité du gestionnaire de rôles n'a pas été activée."}

Le ActionFilter fourni par le framework est l'endroit où l'erreur est renvoyée quand:

WebSecurity.InitializeDatabaseConnection ("DefaultConnection", "UserProfile", "Id", "Nom d'utilisateur", autoCreateTables: true); 

est appelé. 

Voici une partie du stacktrace:

[ProviderException: la fonctionnalité du gestionnaire de rôles n'a pas été activée.]
System.Web.Security.Roles.EnsureEnabled () +9561885
System.Web.Security.Roles.get_Provider () +8
WebMatrix.WebData.WebSecurity.InitializeProviders (DatabaseConnectionInfo Connect, String userTableName, String userIdColumn, String UserNameColumn, Boolean autoCreateTables) +104
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection (String ConnectionStringName, String userTableName, String userIdColumn, String userNameColumn, Booléen autoCreateTables)
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor () dans c:\Utilisateurs\Kyle\Documents\Visual Studio 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filtres\InitializeSimpleMembershipAttribute.cs: 42

[InvalidOperationException: la base de données d'adhésion simple ASP.NET n'a pas pu être initialisé. Pour plus d'informations, veuillez consulter http://go.Microsoft.com/fwlink/?LinkId=256588]
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor () dans c:\Utilisateurs\Kyle\Documents\Visual Studio 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filtres\InitializeSimpleMembershipAttribute.cs: 46

J'héberge le code sur github au lien suivant https://github.com/keroger2k/InoutBoard

20
Kyle Rogers

Première voie

Vérifiez la réponse de sphair out (dans le fil actuel).

Deuxième voie

Ajoutez les assemblys suivants au web.config:

<system.web>
  <compilation debug="true" targetFramework="4.5">
    <assemblies>
      <add Assembly="WebMatrix.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add Assembly="WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </assemblies>
  </compilation>
</system.web>

Mettre à jour

L'assembly WebMatrix.WebData contient une méthode de démarrage pour initialiser les fournisseurs d'adhésion/rôle et activer le gestionnaire de rôles (PreApplicationStartCode.Start). Mais ASP.NET n’a pas pu trouver cela à exécuter dans votre cas. En ajoutant ces deux lignes de code, nous forçons ASP.NET à rechercher PreApplicationStartMethodAttribute(s) dans ces assemblys.

25
Mehdi Golchin

Au lieu d’ajouter les assemblys au web.config, comme le suggère Mehdi Golchin, vous pouvez également modifier les références d’assembly sur WebMatrix.Data et WebMatrix.WebData en CopyLocal = True.

10
sphair

J'ai eu exactement la même erreur chez mon hébergeur (WinHost.com - ils sont excellents BTW).

Ma solution consistait à ajouter à web.config:

<appSettings>
    <add key="enableSimpleMembership" value="true" />
</appSettings>
10
Chris Patterson

Dans le cas où d'autres personnes obtiennent cette erreur et que la solution ci-dessus ne fonctionne pas, comme dans mon cas. Il disait objet enfant invalide lorsque j'ai essayé d'ajouter le balisage des assemblys. Je devais spécifier les tags roleManager et d'appartenance comme ci-dessous. Une fois que j'ai fait cela, la base de données de mise à jour a fonctionné.

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear/>
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
      </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear/>
        <add name="SimpleMembershipProvider" 
             type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
      </providers>
    </membership> 
10
Xaxum
0
Fernando