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

时间:2018-03-11 09:20:26

标签: c# sql sql-server port

使用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-Connections(这是我的防火墙管理员告诉我的)。 我第一次运行它时,它试图在端口65175-65177上建立TCP-Connections。当我们稍后再试一次时,它尝试通过TCP连接到45000左右的三个端口。

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

我只能通过谷歌找到,通常你只需要端口1433 TCP和1434 UDP。我们打开了那些,但后来遇到了上面的问题。

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

一些额外的信息:

  • 如果我使用SQL Server Management Studio连接到SQL Server,我也遇到同样的问题。它似乎需要这些高端口。
  • 如果我将代码更改为使用ODBC(来自System.Data.Odbc-Namespace),我也有同样的问题。
  • 如果我在可以免费访问SQL Server的机器上使用我的代码(中间没有防火墙),它可以正常工作。

1 个答案:

答案 0 :(得分:1)

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

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

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

1.在SQL Server配置管理器的控制台面板中,展开“SQL Server网络配置”,展开“实例名称的协议”,然后双击“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。