【问题标题】:SQL 2008 + IIS Application Pool: Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data pathSQL 2008 + IIS 应用程序池:由于检索用户本地应用程序数据路径失败,无法生成 SQL Server 的用户实例
【发布时间】:2011-11-26 05:17:17
【问题描述】:

我在使用 IIS 7.5 中的 ApplicationPoolIdentity 连接到带有 Northwind 数据库的 SQL Server 2008 R2 Express 时遇到问题,导致以下错误消息:

Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. The connection will be closed.

注释:

  • 我使用的是 Windows 7/VS 2010/IIS 7.5/SQL Server 2008 R2 Express(都在同一台机器上)。
  • 我的网站正在使用“ASP.NET v4.0”应用程序池;
  • ASP.NET v4.0 应用程序池使用 ApplicationPoolIdentity 作为标识;
  • SQL Server 2008 R2 express 具有登录“IIS APPPOOL\ASP.NETv4.0”并授予服务器角色 sysadmin;
  • Northwind 数据库的用户“IIS APPPOOL\ASP.NET v4.0”配置了以下权限:db_accessadmin、db_backupoperator、db_datareader、db_datawriter、db_ddladmin、db_securityadmin;
  • w3wp.exe 进程正在使用用户“IIS APPPOOL\ASP.NETv4.0”运行
  • 可以看到创建了用户配置文件夹(C:\Users\ASP.NET v4.0);
  • 使用应用程序池“DefaultAppPool”也会出现同样的问题。

如果我将 ApplicationPoolIdentity 用户更改为另一个有权访问数据库的用户,它就可以工作。

其他信息:

连接字符串:

<connectionStrings>
    <add name="NorthwindEntities" connectionString="metadata=res://*/NorthwindModel.csdl|res://*/NorthwindModel.ssdl|res://*/NorthwindModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=NOTEBOOK\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

谁能帮我解决这个问题?

感谢您的建议。

【问题讨论】:

  • 你能发布你的连接字符串吗(确保你 XXXX 出任何密码)。

标签: asp.net sql-server-2008 iis-7.5 sql-server-2008-r2


【解决方案1】:

您似乎正在尝试使用 SQL Server Express 的 "user instancing" 功能,即您的连接字符串如下所示:

AttachDBFilename=|DataDirectory|xxxxxx.mdf;用户实例=true

这不适用于 IIS7.5 中的 ApplicationPoolIdentity 帐户。有关详细信息,请参阅此 MS 知识库文章:

Problems with SQL Server Express user instancing and ASP.net Web Application Projects

使用 Visual Studio 2005、Visual Studio 2008 或 Visual Studio 2010 并且依赖于用户使用 SQL 实例化 Server Express 2005 或 SQL Server Express 2008 不适用于 新的应用程序池标识。这些产品被开发和 针对使用旧 NETWORK 运行的应用程序池进行了测试 服务帐户。

还有 Microsoft discourage 现在正在使用此功能:

此功能将在 Microsoft SQL 的未来版本中删除 服务器。避免在新的开发工作中使用此功能,并计划 修改当前使用此功能的应用程序。

如果您还没有这样做,我会 attach 将数据库连接到 SQL Express 并使用常规 SQL 连接字符串,就像您在生产环境中所做的那样。如果尚未启用,您可能需要使用 SQL Server 配置管理器为 SQL Express 实例启用 TCP/IP:

并确保在该对话框的下一个选项卡上也配置了端口 1433。

【讨论】:

  • 感谢您的回复,但奇怪的是我没有使用用户实例(请参阅我原始帖子中的其他信息),也没有附加数据库(mdf 文件)。我在实体框架中使用常规连接字符串。
  • 问题已解决。原因是虽然我没有对主数据库(northwind)使用 sql 用户实例,但我对 aspnetdb 进行了操作。我没有意识到这一点。所以,我只是将 aspnetdb 附加到 sql express 上,一切都很好。谢谢。
  • @rperson - 啊哈!那个 ASPNETDB 连接字符串有点鬼鬼祟祟。 :)
猜你喜欢
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 2019-11-11
相关资源
最近更新 更多