1

一点背景:

我有一个 Windows .NET 应用程序,被北美大约 40 名现场员工使用。该程序允许用户在现场输入数据(远离互联网访问),然后在晚上同步到我们的 Sql Server 2005 数据库。几天前,我的两个用户报告说,当他们执行一个尝试连接到我们的服务器数据库(使用 .NET 的 SqlConnection 类)的操作时出现以下错误。

System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

我们的现场员工通常使用酒店的 Wi-Fi 连接进行操作,起初我以为他们俩在同一天巧合地进入了“不合作”的网络。第二天,搬到不同的酒店后,其中一位用户的问题消失了,但另一位用户的问题仍然存在。

除了提供错误消息之外,此背景的目的是指出

  • 这是使用该软件一年多以来第一次出现此问题,并且
  • 我们的大多数用户使用相同的软件连接到我们的服务器数据库没有任何问题。

这让我犹豫是否认为问题出在服务器上(我读过的有关此错误的大多数论坛和博客都提供了确保正确配置 SQL Server 的步骤)。

注意到错误消息的Named Pipes Provider部分,我猜测可能是这个用户的计算机或网络导致它尝试通过管道而不是 TCP 连接,所以我确实尝试将服务器配置为允许 TCP/IP 和 Named Pipes 进行远程连接连接,以前仅设置为 TCP/IP。更改此设置后,此用户的错误继续存在。

所以现在我要集思广益,想一想这个用户的计算机/软件/互联网连接有什么特别之处,会阻碍它连接到我们的 SQL Server。

我们的连接字符串确实使用了我们服务器的 URL(不是 IP 地址),我想知道他的笔记本电脑是否在通过该地址找到它时遇到问题。但是,他能够访问从同一 URL 托管的网站,所以我猜问题出在其他地方。

任何想法将不胜感激。谢谢!

4

2 回答 2

3

您现在可能早就解决了这个问题或继续前进,但是对于那些在连接到 SQL Server 实例时遇到与错误 40/命名管道问题类似的问题的人,以下简单的解决方案对我们有用:

您可以通过在连接字符串中添加前缀来强制客户端程序使用 TCP(或命名管道或其他可用方法)。

对于 .NET SQLConnection 示例,在 SQLConnection 的连接字符串中指定如下:

Server=tcp:192.168.0.1;Integrated Security=SSPI; database=sampledb

有关更多信息,请参阅此博客条目

于 2012-11-20T23:49:31.440 回答
1

是否有可能它们被酒店的防火墙阻止,这可能只允许某些端口上的流量?

于 2010-07-09T02:56:15.167 回答