2012-12-07 20 views
5

Ich verwende SQL Server LocalDB für eine Website.So starten Sie eine SQL Server LocalDB über IIS

SQL Server LocalDB ist installiert und während der Installation wird eine Datenbank erstellt. Eine geteilte Instanz wird über LocalDBCreateInstance, StartLocalDBInstance und LocalDBShareInstance erstellt.

Die Website kann eine Verbindung zur Datenbank herstellen, wenn die Instanz gestartet wird.

Wenn die Instanz jedoch gestoppt wird, wird sie nicht automatisch gestartet. Der Zugriff auf die Datenbank (wenn die Instanz gestoppt wird) aus einer Konsolenanwendung bewirkt, dass die Instanz gestartet wird.

Das scheint also eine Art von Problem zu sein.

Der Anwendungspool wird unter der AppPool-Identität ausgeführt. Das Umschalten auf Netzwerkdienst oder lokales System löst das Problem jedoch nicht.

Der Anwendungspool ist so konfiguriert, dass er das Benutzerprofil lädt, und das Attribut "setProfileEnvironment" wird ebenfalls auf "true" gesetzt. (Beide Einstellungen sind erforderlich wie beschrieben here und here).

Ich habe den Datenbankzugriff mit dem Sysinternal Process Monitor überwacht, konnte aber keine "Zugriff verweigert" -Einträge finden.

Ich habe auch versucht, StartLocalDBInstance von der Website selbst aufzurufen (im Global.asax). Der Aufruf wird erfolgreich zurückgegeben (Rückgabewert ist S_OK), die Instanz wird jedoch weiterhin gestoppt.

Antwort

6

Das ist der Nachteil der Verwendung von LocalDB unter IIS - die Instanz gehört zu Ihrer interaktiven Anmeldung, und der Instanzprozess kann nur durch diese Anmeldung gestartet werden. Da IIS als ein Dienstkonto ausgeführt wird, kann die LocalDB-Instanz, die zu Ihrem interaktiven Konto gehört, nicht gestartet werden.

Sie können eine LocalDB-Instanz im Besitz des IIS-Dienstkontos verwenden. Beachten Sie jedoch, dass Probleme mit Benutzerprofilen auftreten können. LocalDB erfordert das Erstellen und Laden des Benutzerprofils, während IIS schlanke Benutzerprofile verwendet, die manchmal nicht vorhanden sind vollständig erstellt und geladen.

In diesen beiden Blogposts finden Sie ausführlichere Informationen zum Ausführen von LocalDB in vollständigen IIS. Ich würde es nur für Entwicklungsumgebung empfehlen und Service-based SQL Express für Produktion verwenden.

  1. Part 1: User Profile
  2. Part 2: Instance Ownership
+2

Wie unglücklich. –

+0

Ich habe ein [kleines Tool bei CodePlex] (http://localdbcompanion.codeplex.com/) gestartet, um das Teilen und Starten der automatischen Instanz (genannt "v11.0") mit dem Standard-Anwendungspool zu vereinfachen. Es müsste jedoch erweitert werden, um benutzerdefinierte Instanznamen und andere App-Pools abzudecken. Und ich würde nur empfehlen, es in der Entwicklungsumgebung zu verwenden :-) –

+0

Seltsam. Wenn Sie "Benutzerprofil laden" in IIS auf "true" setzen können, sollte es funktionieren. Außerdem dachte ich, dass Express ziemlich zugunsten von LocalDB veraltet war ... – dudeNumber4

Verwandte Themen