SQL 2008 + IIS应用程序池:由于无法检索用户的本地应用程序数据路径而无法生成SQL Server的用户实例

时间:2011-09-27 16:34:58

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

我在使用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具有授予服务器角色sysadmin的登录“IIS APPPOOL \ ASP.NETv4.0”;
  • Northwind数据库的用户“IIS APPPOOL \ ASP.NET v4.0”配置了以下权限:db_accessadmin,db_backupoperator,db_datareader,db_datawriter,db_ddladmin,db_securityadmin;
  • 使用“IIS APPPOOL \ ASP.NETv4.0”用户运行w3wp.exe进程
  • 我可以看到创建了用户个人资料文件夹(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>

有人可以帮我解决这个问题吗?

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

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

AttachDBFilename=|DataDirectory|xxxxxx.mdf;User Instance=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(如果尚未启用):

enter image description here

确保在该对话框的下一个标签页上配置了端口1433。