[英]unable to connect to sql server database from windows application c#
[英]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="data source=server,portnumber;initial catalog=dbname;persist security info=True;user id=user;password=password;MultipleActiveResultSets=True;""
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="
data source=localhost;initial catalog=dbname;
persist security info=True;
user id=user;
password=password;
MultipleActiveResultSets=True;""
(回车只是为了清楚起见)
我发现了发生这种情况的原因。 在IIS中,我必须为应用程序启用Windows身份验证并禁用匿名身份验证。 我不确定为什么不通过Windows身份验证就无法使用SQL身份验证连接到SQL Server,但这是允许我通过IIS连接的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.