我在本地机器上使用 VS2008 编写 ASP.Net 应用程序。我们的 SQL Server 2008 实例远程托管在专用数据库服务器上。我可以通过本地机器和生产服务器上的应用程序连接到服务器,但不能在我们的开发服务器上连接到服务器。
我在开发服务器上打开了端口 1433,但没有用。两台服务器上的连接字符串相同。生产服务器和开发服务器都使用 Windows Server 2008。我得到的错误
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到或无法访问服务器。请验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)
编辑:我想我应该明确说明,SQL Server 由我们付费的托管公司运营,因此我无法访问此服务器的任何配置。此外,据我所知,服务器运行良好,因为我可以通过我的应用程序从 2/3 个不同的地方连接到它。
编辑 2:事实证明,我们办公室的一个路由器阻止了通过端口 1433 的流量。感谢 Bryan 的持续帮助。
答案1
显然,服务器配置没有问题,正如您所解释的那样,您已经可以从其他远程系统进行连接,但在这个特定系统上遇到了问题。您可以从开发系统解析并 ping 服务器,但似乎无法连接到 SQL 端口 (1433)。正如 Andy 在评论中指出的那样,这可能是因为您的开发系统和 SQL 服务器之间的防火墙可能阻止了您的连接尝试。
您可以测试使用 telnet 连接到 SQL 服务器(显然将主机名替换为您的 SQL 服务器的主机名)。
telnet sql.server.com 1433
如果您看到类似以下内容的响应:
Trying sql.server.com...
Connected to sql.server.com.
Escape character is '^]'
...那么这不是防火墙问题,但是如果您看到类似以下内容的消息:
Unable to connect to remote host
...那么几乎可以肯定是防火墙阻碍了你。
有一篇很好的 MSDN 文章解释了如何解决与 SQL Server 的连接问题,其中有更详细的内容。
答案2
尝试强制 TCP 连接类型(命名管道似乎具有更高的优先级)。将连接字符串的服务器部分更改为server=tcp:hostname,1433
。