底层提供程序在Open iis上失败

时间:2017-10-06 10:47:02

标签: c# asp.net-mvc entity-framework asp.net-web-api

我正在使用asp.net web api,当我在微软视觉工作室内置服务器上运行我的项目时,每件事情都很好,但当我在本地iis服务器上托管它时,我收到以下错误

底层提供商在Open

上失败

我正在使用实体框架,我在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" />

2 个答案:

答案 0 :(得分:1)

根据该连接字符串,尝试连接到SQL实例的标识是在应用程序的IIS应用程序池中指定的用户帐户(通常为iis apppool\defaultapppool)。你要么需要;

  • 允许此帐户访问SQL数据库
  • 将SQL帐户的必要凭据放入连接字符串
  • 在应用程序池中设置Windows帐户详细信息,以便应用程序进行连接。

正在进行调试时,用于通过Integrated Security=True连接的帐户是当前登录的用户帐户 - 可能设置为允许您连接到数据库。但是,IIS需要运行特定帐户,不是当前登录的用户 - 因此需要上面的选项。

答案 1 :(得分:0)

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

  

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

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

希望它有所帮助!