20

Ho avviato un nuovo progetto Internet con VS2012 e sto cercando di ristrutturare il mio progetto un po 'e non riesco a mantenere il funzionamento di SimpleMemberhsipProvider. Fondamentalmente, tutto ciò che ho fatto è spostare gli oggetti dei modelli in un progetto principale insieme ad un paio di altri elementi. Ho implementato Ninject e sto provando ad astrarre Entity un po 'usando un pattern di repository per ottenere i miei dati. Non mi sembra davvero che sia cambiato molto con il progetto corrente, ma per qualche motivo quando avvio l'applicazione ora ottengo:SimpleMembershipProvider non funziona

{"La funzione di Role Manager non è stata abilitata."}

L'ActionFilter che viene fornito dal framework è dove viene generata l'errore quando:

WebSecurity.InitializeDatabaseConnection ("DefaultConnection", "UserProfile", "ID", "username", autoCreateTables: vero);

viene chiamato.

Ecco alcuni dei stacktrace:

[ProviderException:. La funzionalità di Role Manager non è stato abilitato]
System.Web.Security.Roles.EnsureEnabled() 9.561.885
System.Web .Security.Roles.get_Provider() +8
WebMatrix.WebData.WebSecurity.InitializeProviders (DatabaseConnectionInfo Connect, String userTableName, String userIdColumn, String userNameColumn, booleano autoCreateTables) 104
WebMatrix.WebData .WebSecurity.InitializeDatabaseConnection (String connectionStringName, String userTableName, String userIdColumn, String userNameColumn, booleano autoCreateTables) 100
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() in c: \ Users \ Kyle \ Documents \ di Visual Studio 2012 \ Projects \ InoutBoard \ InoutBoard.Core \ Infrastructure \ Filtri \ InitializeSimpleMembershipAttribute.cs: 42

[InvalidOperationException: Il database di appartenenza ASP.NET semplice non può essere inizializzato. Per ulteriori informazioni, si prega di consultare http://go.microsoft.com/fwlink/?LinkId=256588]
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() in c: \ Users \ Kyle \ Documenti \ Visual Studio 2012 Projects \ InoutBoard \ InoutBoard.Core \ Infrastructure \ \ filtri \ InitializeSimpleMembershipAttribute.cs: 46

sto ospitando il codice su GitHub al seguente link https://github.com/keroger2k/InoutBoard

+0

un'occhiata a http://weblogs.asp.net/jgalloway/archive/ 2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-form-and-asp-net-mvc-4-templates.aspx – RickAndMSFT

+0

@RickAndMSFT L'ho letto già. E 'stato un ottimo post, tuttavia non sembra rispondere alla mia domanda? –

risposta

25

primo modo

Controllare l'uscita sphair's answer (nella discussione corrente).

Secondo modo

Aggiungere le seguenti assemblee alla 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> 

Aggiornamento

L'assemblea WebMatrix.WebData contiene un metodo di avvio per inizializzare i fornitori/ruolo di appartenenza e abilitare RoleManager (PreApplicationStartCode.Start). Ma ASP.NET non è riuscito a trovarlo nel tuo caso. Aggiungendo queste due righe di codice, forziamo ASP.NET a cercare questi assembly per PreApplicationStartMethodAttribute(s).

+0

Potresti approfondire il motivo per cui è necessario? –

+0

Ci scusiamo per la mancanza di spiegazioni, aggiunte. –

+0

Vedere anche la mia risposta suggerita di seguito riguardante l'impostazione dei riferimenti alla copia locale. – sphair

10

Nel caso in cui altri ricevano questo errore e la soluzione di cui sopra non funziona, come nel mio caso. Ha detto oggetto figlio non valido quando ho provato ad aggiungere il markup degli assembly. Ho dovuto specificare i tag roleManager e membership come di seguito. Una volta fatto ciò, il database di aggiornamento ha funzionato.

<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> 
+0

+1 Questo era quello di cui avevo bisogno, grazie! – Paul

10

Ho avuto lo stesso errore in esecuzione presso la mia società di hosting (WinHost.com - sono eccellenti BTW).

La mia soluzione era quella di aggiungere al web.config:

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

Invece di aggiungere le assemblee al web.config come suggerisce Mehdi Golchin, in alternativa è quello di cambiare i riferimenti di montaggio su WebMatrix.Data e WebMatrix.WebData to CopyLocal = True.

+2

Sono d'accordo. Ho scoperto lo stesso. Se avessi continuato a leggere le risposte, avrei potuto risparmiarmi un po 'di tempo :) –

+0

Ho fatto questo per un capriccio per qualche altro motivo (perché questo è caricato ma questo non è? Una specie di cosa) ed è stato estremamente perplesso da esso. – vbullinger