2012-12-07 33 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