繁体   English   中英

无法使用SQL身份验证从IIS托管应用程序连接到SQL Server数据库

[英]Unable to connect to SQL Server database from IIS hosted application using SQL authentication

我一直在使用Entity Framework 6.0为后端连接开发VS 2012中的应用程序。 我建立了到SQL Server 2008数据库的连接,并成功配置了Entity Framework模型(首先是数据库),没有出现问题。 但是,当我尝试在IIS中运行应用程序时连接到数据库时,始终出现异常。

异常有几层,但是最里面的异常显示为:

连接尝试失败,因为一段时间后连接方未正确响应,或者建立连接失败,因为连接的主机未能响应

我曾尝试将连接超时延长到60,但这并没有影响,通过其他方式进行连接也不会花很长时间,因此我认为这与超时无关。 调用应用程序是一个Web API项目,位于本地IIS中,我已将确切的连接字符串从我的EF模型项目复制到了该项目中的web.config文件中,如下所示:

<add name="ConnectionName" 
     connectionString="metadata=res://*/ModelName.csdl|res://*/ModelName.ssdl|res://*/ModelName.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=server,portnumber;initial catalog=dbname;persist security info=True;user id=user;password=password;MultipleActiveResultSets=True;&quot;" 
     providerName="System.Data.EntityClient" />

我已经通过SQL Server Management Studio使用标准的SQL Client连接(不是从IIS应用程序)成功连接到此连接,甚至在本地测试时甚至使用相同的EF连接字符串,但是由于某些原因,我无法通过该应用程序在IIS中托管时的代码。 我可以确认DbContext类在调试时正在使用适当的连接信息。

更新:我发现该问题并非特定于实体框架。 当我也使用SQL客户端进行测试时,就会发生此问题。 但是,IIS中托管的每个应用程序都会发生这种情况,而不仅仅是我的Web API应用程序。 但是,仍然无法确切地找出问题所在。

在此连接字符串中,SQL Server称为server ,端口号为portnumber 显然,通过SSMS连接时您没有使用此功能。 为什么不更改此连接字符串以匹配SSMS中的任何有效内容。

它可能至少应该是localhost而不是server

connectionString="
metadata=res://*/ModelName.csdl|
res://*/ModelName.ssdl|
res://*/ModelName.msl;
provider=System.Data.SqlClient;
provider connection string=&quot;
    data source=localhost;initial catalog=dbname;
persist security info=True;
user id=user;
password=password;
MultipleActiveResultSets=True;&quot;"

(回车只是为了清楚起见)

我发现了发生这种情况的原因。 在IIS中,我必须为应用程序启用Windows身份验证并禁用匿名身份验证。 我不确定为什么不通过Windows身份验证就无法使用SQL身份验证连接到SQL Server,但这是允许我通过IIS连接的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM