2 Stimmen

ASP.NET-Mitgliedschaftsanbieter auf einem anderen Entwicklungsrechner

Ist der "asp.net membership provider" portabel? Muss ich die Datei aspnet_regsql.exe ausführen, um sie für jeden neuen Rechner einzurichten?

Ich habe die Datenbank des Mitgliedschaftsanbieters in Visual Studio Database Edition importiert, in die Versionskontrolle eingecheckt und auf einem anderen Entwicklungsrechner neu bereitgestellt. Auf dem neuen Rechner erhielt ich die folgende Fehlermeldung. Wie kann ich diesen beheben? Vielen Dank!

Die 'System.Web.Security.SqlMembershipProvider' erfordert ein Datenbankschema, das mit mit der Schema-Version '1'. Allerdings ist das aktuelle Datenbankschema ist jedoch nicht nicht mit dieser Version kompatibel. Sie können müssen Sie entweder ein kompatibles Schema mit aspnet_regsql.exe (verfügbar im Framework Installationsverzeichnis), oder ein Upgrade des Anbieters auf eine neuere Version.

3voto

Raúl Roa Punkte 11461

Es ist "portabel", solange Sie Framework 2.0 oder höher in der neuen Entwicklungsumgebung haben und Zugriff auf die DB, die das Schema enthält.

Die Anwendung aspnet_regsql.exe dient nur der Erstellung des Datenbankschemas. Die eigentliche Arbeit findet in der web.config statt, wenn Sie Ihren Provider angeben.

Solange Sie den Verweis auf die .mdf-Datei in der Verbindungszeichenfolge oder in der DB mit dem Schema des Mitgliedschaftsanbieters haben, sollte alles gut funktionieren.

Verbindungszeichenfolge:

<connectionStrings>
        <add name="LocalSQL" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=YourCatalog;Persist Security Info=True;User=sa;Password=password" providerName="System.Data.SqlClient"/>        
    </connectionStrings>

Anbieter der Mitgliedschaft:

<membership defaultProvider="DefaultProvider" userIsOnlineTimeWindow="30">
            <providers>
                <clear/>
                <add name="DefaultProvider" connectionStringName="LocalSQL" applicationName="DefaultApp" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </providers>
        </membership>

0voto

Tommy Hui Punkte 1296

Der SQL Membership Provider wird für jede Datenbank benötigt. Bei der Registrierung des Anbieters werden bestimmte Tabellen in der Datenbank angelegt. Wenn diese Tabellen nicht vorhanden sind, erhalten Sie die oben genannten Fehler.

Da die Tabellen in der Datenbank erstellt werden, können so viele verschiedene Anwendungen oder Entwicklungsmaschinen wie gewünscht die SQL-Datenbank gemeinsam nutzen.

Wenn Sie jedoch eine andere Provider-Instanz wünschen, weil Sie eine andere Anwendung haben oder mit einer anderen SQL-Datenbank kommunizieren müssen, müssen Sie sich erneut registrieren (die Tabellen erstellen). Eine andere Möglichkeit wäre die Verwendung der SQL-Replikation, um die Tabellen von einer Datenbank in eine andere zu kopieren.

Wahrscheinlich muss Ihre Anwendung die Datei web.config ändern, um sicherzustellen, dass sie die richtige Verbindungszeichenfolge zu einer bestehenden SQL-Datenbank hat.

0voto

Matt Frear Punkte 48503

Ich hatte dieses Problem auch. Bei mir musste ich meiner Anwendung explizit einen Namen geben (auf meinem Entwicklungsrechner war es "/").

web.config:

<membership>
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" applicationName="jobs"... />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" applicationName="jobs" ... />
  </providers>
</profile>
<roleManager enabled="true">
  <providers>
    <clear />
    <add connectionStringName="ApplicationServices" applicationName="jobs" ... />
    <add applicationName="jobs" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>

Und dann in meiner Datenbank:

INSERT INTO [dbo].[aspnet_Applications]([ApplicationName], [LoweredApplicationName], [ApplicationId], [Description]) SELECT N'jobs', N'jobs', N'74b045ce-9c16-4e6a-b1ec-08504600a627', NULL

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X