【发布时间】:2016-09-23 13:47:32
【问题描述】:
SQLConnection 使用随机命名的管道(445)而不是 tcp(1433)。 namedpipes 端口被我们的防火墙阻止,但不是 tcp。这只发生在尝试连接到我们的一个 sql 服务器时。大多数情况下,应用程序使用 tcp,但随机尝试使用 namedpipes 端口。我们的 sql 连接非常简单,我们不会用它做任何花哨的事情。
我们不想在我们的连接字符串上硬编码 tcp 端口。我们已经尝试过了,它解决了问题。该问题仅在上周出现,我们尝试连接的 Web 应用程序运行了一段时间。
为什么 sql 连接有时会尝试连接 445 而不是 1433?这是 .net 最新更新引入的错误,还是服务器可以指定下一个要使用的端口?
更新 2016-09-23 11:00
这是我们用来连接的代码示例
string connectionString = "Data Source=SERVERNAME;Initial Catalog=DATABASE;uid=username;pwd=mypass;MultipleActiveResultSets=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
try {
connection.Open();
…
【问题讨论】:
-
你能贴出你的连接字符串代码吗
-
您永远不会提到此连接是否来自最终用户 PC、Web 服务器、其他数据库服务器等。但是,无论是使用命名管道还是 TCP 是本地 PC 上发起的连接设置连接。有关更多详细信息,请参阅msdn.microsoft.com/en-us/library/ms181035.aspx。
-
要么是web服务器,要么是客户端pc连接到sql server。
-
没有错误,这是您的连接字符串所要求的。
SERVERNAME不是 FQDN,因此不能被视为 TCP 服务器名称。 SQL Server 必须检查每个可用的协议以确定哪个协议可以实际连接。如果启用了命名管道,将首先尝试。 -
@AntonKrouglov,应用程序尝试命名管道的原因仅仅是因为 TCP 连接失败。客户端驱动程序捕获 TCP 连接失败,然后尝试使用命名管道作为后备,混淆原始 TCP 错误。
标签: c# .net sql-server sqlconnection