代码之家  ›  专栏  ›  技术社区  ›  Thomas

与SQL Server的连接使用随机端口

  •  1
  • Thomas  · 技术社区  · 6 年前

    我使用C#连接到SQL Server时遇到问题。我必须连接到防火墙后面的SQL Server实例。我正在使用以下代码(我现在没有确切的代码片段,但这应该非常接近):

    using (SqlConnection myConnection = new SqlConnection("Server=myServerName\myInstanceName;" +
                                                          "Database=myDataBase;" +
                                                          "User Id=myUsername;" +
                                                          "Password=myPassword;")
    {
        myConnection.Open();
    
        using (SqlCommand myCommand = new SqlCommand("select * from table", 
                                                      myConnection))
        {        
            myReader = myCommand.ExecuteReader();
            while(myReader.Read())
            {
                // do sth.
            }   
        }
    }
    

    当我运行这段代码时,它似乎需要在一系列非常高的端口上建立TCP连接(这是我的防火墙管理员告诉我的)。 我第一次运行它时,它试图在端口65175-65177上建立TCP连接。当我们稍后再次尝试时,它尝试通过TCP在45000左右的三个端口上进行连接。

    这是一个问题,因为我们不知道要打开哪些端口,因为它们似乎是随机的(我觉得这很奇怪)。

    我在google上所能找到的就是,通常您只需要端口1433 TCP和1434 UDP。我们打开了这些,但随后遇到了上述问题。

    有人能向我解释一下,为什么这段代码试图连接这些高随机端口?或者如何告诉我的代码不要这样做?

    一些附加信息:

    • 如果使用SQL Server Management Studio连接到SQL Server,我也会遇到同样的问题。它似乎需要这些高端口。
    • 如果我将代码更改为使用ODBC(来自System.Data.ODBC命名空间),我也会遇到同样的问题。
    • 如果我在一台可以自由访问SQL Server(中间没有防火墙)的机器上使用代码,它就可以正常工作。
    1 回复  |  直到 6 年前
        1
  •  1
  •   Thomas    6 年前

    正如Martin Smith在评论中指出的那样,解决方案是更改SQL Server的配置,因为它是为动态端口配置的。

    复制自 https://technet.microsoft.com/en-us/library/ms177440(v=sql.105).aspx :

    为SQL Server数据库引擎分配TCP/IP端口号

    1、在SQL Server Configuration Manager的控制台面板中,展开SQL Server Network Configuration,展开Protocols作为instance name,然后双击TCP/IP。

    2、在“TCP/IP属性”对话框的“IP地址”选项卡上,多个IP地址的格式为IP1、IP2,直至IPAll。其中之一是环回适配器的IP地址127.0.0.1。计算机上的每个IP地址都会显示其他IP地址。右键单击每个地址,然后单击属性以标识要配置的IP地址。

    3、如果“TCP动态端口”对话框包含0,表示数据库引擎正在侦听动态端口,请删除0。

    4、在“IPn属性”区域框的“TCP端口”框中,键入您希望此IP地址侦听的端口号,然后单击“确定”。

    5、在控制台窗格中,单击SQL Server服务。

    6、在详细信息窗格中,右键单击SQL Server(实例名称),然后单击重新启动,以停止并重新启动SQL Server。