【发布时间】:2012-03-13 00:47:31
【问题描述】:
我有一个使用本地 SQL Server Express 数据库(又名 ~/App_Data/ASPNETDB.MDF)的 Web 应用程序。
当我在 Windows 2008 Standard (SP2) 上部署到 IIS 7.0 时,我收到错误:
发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)
错误信息继续提供一些建议
SQLExpress 数据库文件自动创建错误:
连接字符串指定一个本地 Sql Server Express 实例 使用应用程序的 App_Data 目录中的数据库位置。 提供者试图自动创建应用程序 服务数据库,因为提供商确定该数据库 不存在。以下配置要求是必要的 成功检查应用程序服务是否存在 数据库并自动创建应用服务数据库:
- 如果应用程序在 Windows 7 或 Windows Server 上运行 2008R2,需要特殊的配置步骤才能启用 自动创建提供者数据库。附加信息 可在:http://go.microsoft.com/fwlink/?LinkId=160102 获得。如果 应用程序的 App_Data 目录尚不存在,网络 服务器帐户必须具有对应用程序的读写权限 目录。这是必要的,因为 Web 服务器帐户将 如果尚未创建 App_Data 目录,则自动创建 存在。
- 如果应用程序的 App_Data 目录已存在,则 Web 服务器帐户只需要对 应用程序的 App_Data 目录。这是必要的,因为网络 服务器帐户将尝试验证 Sql Server Express 数据库已存在于应用程序的 App_Data 目录中。 从 Web 服务器撤消对 App_Data 目录的读取访问权限 帐户将阻止提供者正确确定 Sql Server Express 数据库已经存在。这将导致错误 当提供者试图创建一个已经存在的副本时 现有数据库。需要写入权限,因为 Web 服务器 创建新数据库时使用帐户的凭据。
- 必须在计算机上安装 SQL Server Express。
- Web 服务器帐户的进程标识必须具有本地用户配置文件。有关如何创建 机器和域帐户的本地用户配置文件。
我不明白如何解决4. 的问题(在哪里可以找到“自述文件”?)。但是,其他项目在我看来是正确的。
具体...
- 有问题的应用程序池作为网络服务(不是应用程序池标识)运行
- 用户 NETWORK SERVICE 对 App_Data 具有完全控制权(我是否正确理解它不需要对 App_Data 的父级进行读/写,因为 App_Data 已经创建?)
有趣的是,如果我将 ASPNETDB.MDF 和 ASPNETDB.LDF 从我的开发机器复制到生产 App_Data,错误会发生变化:
发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)描述:在执行过程中发生未处理的异常 执行当前的 Web 请求。请查看堆栈跟踪 有关错误及其起源的更多信息 代码。
异常详细信息:System.Data.SqlClient.SqlException:A 建立时发生与网络相关或特定于实例的错误 到 SQL Server 的连接。未找到或未找到服务器 无障碍。验证实例名称是否正确以及 SQL 服务器配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)
我错过了什么?
【问题讨论】:
标签: asp.net-mvc-3 deployment iis-7