我正在尝试将客户端计算机上托管的ASP.NET 2.0应用程序连接到运行Windows Server 2003的域控制器上安装的SQL Server 2000实例(我很欣赏这不是最佳实践,但它是我的东西不能变)。我使用的是SQL Server身份验证,而不是Windows身份验证。
在调试期间,在Web应用程序中尝试“连接”时显示以下错误(而不是在Sql Server中运行任何对象):
“建立与服务器的连接时发生错误。连接到SQL Server 2005时,此错误可能是由于在默认设置下SQL Server不允许远程连接这一事实。(提供商:命名管道提供商) ,错误:40 - 无法打开与SQL Server的连接)“
我做了一些研究,并检查过各种各样的事情:
1)我确定连接字符串是正确的 - 实际上我构建了一个使用相同连接信息并连接成功的Windows应用程序...
2)这仅限于Web应用程序 - 在远程客户端计算机上运行的Windows应用程序使用相同的连接字符串连接就好(参见1)。
3)两台计算机上的防火墙设置都不会阻止连接(参见1)。
4)我可以ping Windows 2003服务器(见1)
5)SQL Server凭证肯定拥有所需对象的权限
6)如果我(暂时)将Web应用程序放在Windows Server 2003上并运行它,它会加载并运行正常(在单独的计算机上使用浏览器,或者在我尝试连接的客户端计算机上) - 建议这只是远程连接的问题,并再次确认机器之间的连接,并确认SQL Server用户的必要安全权限。
7)我可以在客户端计算机上启动查询分析器并使用相同的SQL服务器凭据,可以在目标数据库上运行相同的查询。
难住了。请帮忙!
答案 0 :(得分:0)
您需要进入SQL Server配置管理器并确保已启用“命名管道”选项。安装SQL Server时,默认情况下不会打开它。
答案 1 :(得分:0)
由于我在原始问题中所做的研究,包括Windows应用程序连接的能力,但不是从同一台机器连接的ASP.NET应用程序,以及Web应用程序在服务器本身上工作的确认,我确信SQL服务器设置正确,连接和防火墙不是问题 - 它必须是Windows应用程序与Web应用程序的安全凭据的差异。
Windows应用程序在已登录的Windows用户的安全凭据中运行并使用该身份验证进行身份验证,而webapp在受限制的帐户中运行,并且在默认情况下连接到SQL Server时不会传递这些凭据。我只是添加到web.config,它模拟了运行Web应用程序的用户帐户,而且一切正常!
问题解决了。