【问题标题】:Can't Connect to SQL Server if default port is not specified如果未指定默认端口,则无法连接到 SQL Server
【发布时间】:2021-08-11 18:01:53
【问题描述】:

我在连接到 SQL Server 实例时遇到了一个奇怪的情况。该实例正在运行并在端口 1433 上侦听,但是除非我在连接字符串中指定默认端口 1433,否则我无法连接。

不起作用:

<add name="DataContext" connectionString="Data Source=192.168.150.1\sqlinstance;Initial Catalog=DATABASE;Persist Security Info=True;User ID=dbUser;Password=dbPass;MultipleActiveResultSets=True; Asynchronous Processing=true;Max Pool Size=700" providerName="System.Data.SqlClient" />

有效:

<add name="DataContext" connectionString="Data Source=192.168.150.1\sqlinstance,1433;Initial Catalog=DATABASE;Persist Security Info=True;User ID=dbUser;Password=dbPass;MultipleActiveResultSets=True; Asynchronous Processing=true;Max Pool Size=700" providerName="System.Data.SqlClient" />

这只是最近才开始发生,只会影响我们的测试环境。除了 IP 地址之外,我们的生产环境配置相同,它不会受此影响。将端口添加到连接字符串并不是什么大问题,但我想弄清楚这是怎么发生的。我还应该提到我在使用 Management Studio 或仅使用 telnet 验证端口是否打开时没有问题。我认为这可能是 C# 或 .net 问题,而不是 SQL Server 配置问题。

【问题讨论】:

  • RE:“...可能是 C# 或 .net 问题...” .net 对诸如完全声明的连接字符串之类的东西非常狭隘。我检查了我们的 SSIS 连接字符串,并明确声明了端口。 (我已经打开了一个环境),所以我无法确认你看到的行为。但是,c# / .net 似乎是一个完美的事业。为了安全起见,您可能希望预测生产失败。
  • 要在不指定端口的情况下连接到命名实例,需要 SQL Server Browser 服务——它应该正在运行,并且它使用的端口 1434 应该为 UDP 流量打开(在服务器上)。即使命名实例在默认端口上运行也是如此,因为连接代码不能假设这一点。请注意,如果您确实指定了一个端口,则该名称将被忽略——因此 192.168.150.1,1433 也可以正常工作。因此,没有拥有命名实例的服务器也是一个可能的原因。这是代码问题(如框架)的可能性很小。

标签: c# sql .net sql-server sql-server-2016


【解决方案1】:

将 ms sql 客户端协议“共享内存”和“命名管道”设置为禁用 如果只使用 tcp ip - 没有默认端口的连接字符串

【讨论】:

  • 禁用其他选项似乎已经解决了这个问题。我现在可以在不指定端口的情况下正常连接。奇怪,因为它们已在生产中启用,但这没有问题,但很高兴它现在工作正常。
猜你喜欢
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2010-09-14
  • 2011-01-11
  • 2012-03-20
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多