【发布时间】: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