2012-12-07 40 views
5

我正在爲網站使用SQL Server LocalDB。如何通過IIS啓動SQL Server LocalDB

安裝SQL Server LocalDB並創建數據庫。共享實例通過LocalDBCreateInstanceStartLocalDBInstanceLocalDBShareInstance創建。

如果實例啓動,網站可以成功連接到數據庫。

但是,如果實例停止,它不會自動啓動。從控制檯應用程序訪問數據庫(當實例停止時)會導致實例啓動。

所以這似乎是某種權限問題。

應用程序池在AppPool標識下運行。但將其切換到網絡服務或本地系統並不能解決問題。

應用程序池配置爲加載其用戶配置文件,並且「setProfileEnvironment」屬性也設置爲true。 (這兩個設置都需要按照herehere的描述)。

我監視了Sysinternal進程監視器的數據庫訪問,但未能找到任何「拒絕訪問」條目。

我也嘗試從網站本身(在Global.asax)調用StartLocalDBInstance。調用成功返回(返回值是S_OK),但實例仍然停止。

回答

6

這是在IIS下使用LocalDB的缺點 - 實例由交互式登錄擁有,實例進程只能由此登錄啓動。由於IIS作爲某個服務帳戶運行,因此無法啓動屬於您的交互式登錄帳戶的LocalDB實例。

你可以使用IIS服務帳戶擁有的LocalDB實例,但要注意,你可能會遇到用戶配置文件的問題 - 的LocalDB需要創建和加載的用戶配置文件,而IIS使用輕量級的用戶配置文件,有時可能不完全創建並加載。

有關在完整IIS中運行LocalDB的更多詳細信息,請參閱這兩篇博文。我只會推薦它用於開發環境,並使用基於服務的SQL Express進行生產。

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

何其不幸。 –

+0

我啓動了一個[CodePlex上的小工具](http://localdbcompanion.codeplex.com/)來簡化與默認應用程序池共享和啓動自動實例(稱爲「v11.0」)。它需要擴展以涵蓋自定義實例名稱和其他應用程序池。我只會建議在開發環境中使用它:-) –

+0

奇怪。如果您可以在IIS中將「加載用戶配置文件」設置爲true,那麼它應該可以工作。此外,我認爲快遞幾乎不贊成LocalDB ... – dudeNumber4