底层提供程序在打开iis时失败

4

我正在开发asp.net web api,当我在微软Visual Studio内置服务器上运行项目时,一切正常,但是当我将其托管到本地的IIS服务器上时,出现了以下错误:

底层提供程序无法打开

我正在使用实体框架,我的web.config中的连接字符串为:

<add name="Entities" connectionString="metadata=res://*/Models.School.csdl|res://*/Models.School.ssdl|res://*/Models.School.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=DBName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我遇到了相同的错误,当我在IIS Express上托管我的应用程序时,这个问题消失了。但是当我尝试在本地IIS上托管它时,这个问题再次出现。我猜对于本地IIS,您需要向数据库添加额外的连接。我在VS 2015上尝试过这个方法。 - Ghost
2个回答

7
基于这个连接字符串,尝试连接到你的 SQL 实例的身份是应用程序 IIS 应用程序池中指定的用户帐户(通常为 iis apppool\defaultapppool)。你需要执行以下操作之一:
  • 允许此帐户访问 SQL 数据库
  • 将 SQL 帐户的必要凭据放入连接字符串中
  • 在应用程序池中设置 Windows 帐户详细信息,以便应用程序进行连接。
当你调试时,使用Integrated Security=True连接的帐户是当前登录用户帐户,如果你在安装机器时安装了 SQL Server(默认 SQL Server 安装配置添加当前用户),那么很可能已经设置为允许你连接到数据库。然而,IIS 需要一个特定的帐户来运行,这个帐户并不是当前登录的用户 - 因此,需要上述选项。

1
这是一个不错且有用的答案,正确而优雅地指出了问题,但我还必须去更改iis服务器中的一些东西...根据另一个答案 - Irf

0

在IIS下,您无法打开数据库连接,这是正常的。

当您在Visual Studio内置服务器下运行时,您的asp.net应用程序基本上是在IISExpress下运行。IISExpress运行在运行Visual Studio的同一用户下,即“您”。但是,当您在IIS下运行时,您的应用程序将在w3wp.exe进程下运行,而这将在IIS应用程序池标识下运行。此帐户无法打开数据库连接。

请参考https://learn.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities-and-sql-server-express以了解如何解决此问题。

希望对您有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接