c# - SQLConnection 使用随机命名管道而不是 tcp

标签 c# .net sql-server sqlconnection

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(); 
…

最佳答案

We don't want to hardcoded the tcp port on our connection string.

您不必将 IP 地址/端口号放在连接字符串中。

但是,您可以在连接字符串中强制使用网络协议(protocol)

Network Library=DBMSSOCN;

https://www.connectionstrings.com/define-sql-server-network-protocol/

但是当我遇到会降低性能的随机命名管道问题时,我会尽可能使连接字符串“具体”。这是...指定网络库、IP 地址和端口号。

顺便说一句,我真的非常希望您实际上没有在编译代码中编写您的连接字符串,下面不是您的实际代码。

string connectionString = "Data Source=SERVERNAME;Initial Catalog=DATABASE;uid=username;pwd=mypass;MultipleActiveResultSets=True";

追加:

您可以在有问题 的机器上围绕此注册表设置“钓鱼”。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo\

如果设置或未设置 DSQUERY,我会具体查看。

https://support.microsoft.com/en-us/kb/328306

Check the protocol that is specified in the following registry subkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo\DSQUERY This value typically reflects the settings in the CNU, but sometimes it does not.

If the value is DBNETLIB, it uses one of the protocols in the enabled protocols list of the CNU. If a specific protocol is listed, that protocol is used instead.

如果这是问题所在.........最终,任何其他程序都可以更改此值。所以你没有完全控制权。同样,更好的解决方案是将网络库放在连接字符串中,这样“外部力量”就无法在游戏中期改变你的游戏。
我之所以知道这是因为我在客户端站点被烧毁了......一些其他程序改变了大约 1/3 的客户端机器(也正在使用我们的应用程序)的 DSQUERY 值并且我们的应用程序性能去了爬行。 Aka,其他一些公司......做了一些让我们的应用程序性能变得糟糕的事情。因此,我没有与它抗争,而是将网络库放入我们的连接字符串中以永久解决该问题。

关于c# - SQLConnection 使用随机命名管道而不是 tcp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39662441/

相关文章:

c# - ASP.Net MVC - 无法识别 'this HtmlHelper'

c# - 如何以编程方式更改映射驱动器的标签?

.net - Entity Framework 中的通用持久方法 - 插入或更新(如果存在)实体

sql-server - SQL Server Management Studio 的性能问题

c# - 如何设计规则引擎?

c# - 在 .NET 4 中实现 RegEx 超时

c# - 计算对数百分比

c# - 在 XElement.ToString 结果中的 XAttributes 之间输入换行符/回车符

c# - 如何根据其他两个字段的值从 MSSQL 返回一个字段

sql-server - Linq 转 Sql : SQL Default Value overridden