sql-server - 如何通过 IIS 启动 SQL Server LocalDB

标签 sql-server iis localdb

我正在为网站使用 SQL Server LocalDB。

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

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

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

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

应用程序池在 AppPool 标识下运行。不过,将其切换到网络服务或本地系统并不能解决问题。

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

我已使用 Sysinternal Process Monitor 监视数据库访问,但未能找到任何“访问被拒绝”条目。

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

最佳答案

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

您可能使用 IIS 服务帐户拥有的 LocalDB 实例,但请注意,您可能会遇到用户配置文件问题 - LocalDB 要求创建并加载用户配置文件,而 IIS 使用有时可能不完整的轻量级用户配置文件创建并加载。

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

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

关于sql-server - 如何通过 IIS 启动 SQL Server LocalDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13761518/

相关文章:

sql - 消息 8672,级别 16,状态 1,第 1 行 MERGE 语句尝试多次更新或删除同一行

sql-server-2012 - SQL 2012 LocalDB:如何在C#中检查当前是否已安装?

c# - 编译器错误消息 : CS0103: The name 'BusinessLogic' does not exist in the current context

iis - 如何在 Windows 10 预览版中安装应用程序请求路由 ARR 3.0?

iis - 带有 Mime 映射的无扩展 URL

.net - 使用自动配置的localdb进行单元测试;我该如何清理?

c# - 使用SQL Server 2014 LocalDB和Visual Studio 2013的LightSwitch构建失败

sql-server - 重建索引不会更改非聚集索引的碎片百分比

sql-server - 恢复 Sql Server 数据库后启用代理

c# - 为每个查询创建新的 SQL 连接是否有优势?