Erster „SQLExpress Datenbank-Datei der automatische Erstellung Fehler“ für Website, die AspNetSqlMembershipProvider verwendet, aber Verbindungszeichenfolge ist auf SQL Server 2005

StackOverflow https://stackoverflow.com/questions/1402430

Frage

Ich habe eine ASP.NET v2.0 Website (nicht Web-Anwendung), wo das Root-Verzeichnis ist öffentlich, aber das „Admin“ Unterverzeichnis einer Authentifizierung erforderlich ist. Alles rund um die Einrichtung ist sehr allgemein - ich eine Verbindungszeichenfolge verwendet, in der Wurzel web.config definiert, und den Standard AspNetSqlMembershipProvider Provider, und ich bin mit dem ASP.NET Login-Steuerelement
. Die web.config im Admin-Verzeichnis gibt an, dass der Benutzer die „Admin“ Rolle haben muss.

Ich verwende SQL Server 2008 und meine Verbindungszeichenfolge ist gut; jede Root-Ebene Seite wird Daten getrieben und sie alle funktionieren.
Provider Konfiguration scheint Schmiere.

wenn ich mich einloggen, die Login-Kontrolle der „OnLoggedIn“ Ereignis ausgelöst wird.
Die letzte Zeile in diesem Fall Code leitet mich auf meine Admin/Default.aspx Seite nach unten. Mein Haltepunkt in „OnLoggedIn“ zeigt mir, dass alles gut, bis die Umleitung nach unten in mein Admin-Verzeichnis ... und dann ...

... und dann ich warte ... und warte ...

Und dann bekomme ich einen Fehler mir zu sagen, es erlebt eine „SQLExpress database file auto-creation error.“

Warum in der Welt versucht es plötzlich ein SQL Server Express-Datei zu erstellen? Warum ist es meine Verbindungszeichenfolge auf einmal zu ignorieren?

Ein seltsamer Hinweis: Kurz vor der letzten Zeile der „OnLoggedIn“ Veranstaltung, die ich in diesen setzen:

bool blnTest = User.IsInRole("Admin");

Ich wollte, wenn blnTest = true sehen.
Was passiert, ist der Prozess, diese Zeile trifft ... und wartet ... und mir schließlich sagt er nicht die SQL Server Express-Datenbank zugreifen kann. Es scheint, dass jeder Verweis (entweder in meinem Code oder hinter den Kulissen) die Rolle des Benutzers zu bestimmen, die falsche Datenbank aufruft.

EDIT: Argh, manchmal es wartet, wenn ich blnTest testen. Andere Zeiten sofort meldet den Wert als „falsch“.

War es hilfreich?

Lösung

Nach Ihrem Kommentar, es sieht aus wie Sie haben nicht explizit eine Rolle Anbieter konfigurierten für Sie vor Ort.

Wenn alles, was in Ihrem web.config lautet:

<roleManager enabled="true" />

Dann setzen Sie auf den Standardanbieter erklärt weiter die Konfiguration hieracrchy (machine.config, globale web.config usw.)

In machine.config Sie haben wahrscheinlich bekommen so etwas wie:

<roleManager>
  <providers>
    <add name="AspNetSqlRoleProvider" 
      connectionStringName="LocalSqlServer" 
      applicationName="/" 
      type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    <add name="AspNetWindowsTokenRoleProvider" 
      applicationName="/" 
      type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>
</roleManager>

Wie Sie sehen können, ist der erste Anbieter konfiguriert ist, eine Connection zu verwenden genannt LocalSqlServer - die auch in der Regel in der machine.config deklariert wird:

<add name="LocalSqlServer" 
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
     providerName="System.Data.SqlClient"/>

Und das ist so konzipiert, eine lokale Datei-basierte Datenbank zu verwenden, die erstellt werden, wenn es nicht bereits vorhanden ist.

So erhalten Rollen auf Ihrer Website arbeiten, sollten Sie Ihr Root web.config zu so etwas wie ammend:

<roleManager enabled="true">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" 
      connectionStringName="YourConnectionStringName" 
      applicationName="/" 
      type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>
</roleManager>

Mit dem Elemente wird alle zuvor definierten Anbieter für diese Art entfernen.

Andere Tipps

Wenn Sie die AttachDBFilename Option in der Verbindungszeichenfolge angeben, Sie sind in der Tat fragen, für Ihr-sehr-own-just-in-time-bereitgestellten SQL Server-Instanz, auch bekannt als die 'Benutzerinstanz'. Diese Instanz wird, indem er die ‚Master‘ Instanz erstellt (die. \ SQLEXPRESS Instanz) für die Bereitstellung einer untergeordnete Instanz, die das Master / Modell / msdb in Ihr Profil impliziert kopieren, einen neuen SQL Server-Prozess unter Ihrem Konto startet die Konfiguration verwendet frisch Master / Modell / msdb kopiert, dann diese ‚Kind‘ Instanz fragt die angegebene ‚Datei‘ als eine neue Datenbank zu befestigen. Die Details werden in SQL Server 2005 Express Edition Benutzerinstanzen .

Der Prozess eine untergeordnete Instanz zu schaffen ist extrem zerbrechlich und, wenn es die DB-Aufruf Ergebnisse schließlich in einem Auszeit Fehler bricht beim Öffnen der Verbindung. In Ihrem Fall scheint es, dass der Prozess bricht in einigen Fällen (wenn Sie den geschützten Teil des Aufstellungsortes erreichen). Warum es bricht, ist sehr schwer, ohne die richtige Information zu erraten. Schauen Sie sich die Häufige Probleme in dem verlinkten Artikel und sehen, ob auf Sie zutrifft. Überprüfen Sie auch das Systemereignisprotokoll für jede Nachricht, warum kann das Kind Instanzen nicht gestartet werden oder es kann nicht die MDF-Datei öffnen. Beachten Sie, dass ein häufiger Fehler für die gleiche physische Datei mit AttachDBFilename unter anderen Anmeldeinformationen zu fragen ist. Jeder Berechtigungsnachweis wird seine eigene ‚Kind‘ Instanz und nur die ersten startet beim Anbringen der gewünschte Datenbank erfolgreich

Ich hatte das gleiche Problem, das für SQL Server deaktiviert wird auf die Dienste zurückzuführen ist.

Überprüfen Sie unter services.msc zu sehen, ob der sqlexpress Dienst ausgeführt wird. Wenn es überprüft, um zu sehen, ob Sie SQL haben express auf Ihrem Rechner installiert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top