7

我正在将 SQL Server LocalDB 用于网站。

安装 SQL Server LocalDB 并在安装过程中创建数据库。共享实例是通过LocalDBCreateInstanceStartLocalDBInstanceLocalDBShareInstance创建的。

如果实例启动,网站可以成功连接数据库。

但是,如果实例停止,它不会自动启动。从控制台应用程序访问数据库(当实例停止时)会导致实例启动。

所以这似乎是某种权限问题。

应用程序池以 AppPool 身份运行。但是,将其切换到网络服务或本地系统并不能解决问题。

应用程序池配置为加载其用户配置文件,并且“setProfileEnvironment”属性也设置为 true。(这两个设置都是必需的,如此此处所述)。

我已经使用 Sysinternal Process Monitor 监控了数据库访问,但没有找到任何“拒绝访问”条目。

我还尝试从网站本身(在 Global.asax 中)调用StartLocalDBInstance 。调用成功返回(返回值为S_OK),但实例仍然停止。

4

1 回答 1

8

这就是在 IIS 下使用 LocalDB 的缺点——实例归您的交互式登录所有,并且实例进程只能由该登录启动。由于 IIS 作为某个服务帐户运行,它无法启动属于您的交互式登录帐户的 LocalDB 实例。

您可能会使用 IIS 服务帐户拥有的 LocalDB 实例,但请注意您可能会遇到用户配置文件问题 - LocalDB 需要创建和加载用户配置文件,而 IIS 使用有时可能无法完全创建和加载的轻量级用户配置文件.

有关在完整 IIS 中运行 LocalDB 的更详细讨论,请参阅这两篇博客文章。我只推荐它用于开发环境,并将基于服务的 SQL Express 用于生产。

  1. 第 1 部分:用户资料
  2. 第 2 部分:实例所有权
于 2012-12-07T18:21:27.797 回答