Sql 使用 Mono 时连接拒绝连接

Sql Connection refuses to connect when using Mono

我创建了一个简单的程序来说明问题。我有一个应该连接到外部 SQL 服务器实例的控制台应用程序。

在本地我可以很好地连接到该主机(无论是设置为 IP 地址还是服务器通过 DNS 关联的外部 URL)。当我将应用程序的编译版本复制到安装了 Mono 的 Ubuntu 服务器并使用 mono ConsoleApplication1.exe 运行 应用程序时,我每次都会收到此错误:

System.Data.SqlClient.SqlException: Server does not exist or connection refused. at System.Data.SqlClient.SqlConnection.Open () <0x409d4e90 + 0x0053f> in :0 at ConsoleApplication1.Program.Main (System.String[] args) <0x409a7d50 + 0x00077> in :0 [ERROR] FATAL UNHANDLED EXCEPTION: System.Data.SqlClient.SqlException: Server does not exist or connection refused. at System.Data.SqlClient.SqlConnection.Open () <0x409d4e90 + 0x0053f> in :0 at ConsoleApplication1.Program.Main (System.String[] args) <0x409a7d50 + 0x00077> in :0

我已经尝试使用直接 IP 到 SQL 服务器实例以及外部 URL(代替下面),我知道它在本地 运行 宁这个应用程序.

在应用程序中用于设置的代码:

App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="Test" connectionString="data source=<Host>\<Instance Name>, 1069;database=<Database Name>;user id=<User>;password=<Password>;multipleactiveresultsets=True;"/>
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
  </startup>
</configuration>

C#代码

class Program
{
    static void Main(string[] args)
    {
        using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Test"].ConnectionString))
        {
            connection.Open();
            Console.WriteLine("Connected");
        }
    }
}

环境:

更新: 我可以确认使用 FreeTDS 我可以从 Ubuntu 实例连接到 SQL 服务器实例,因此问题似乎与 运行 应用程序无关。

我决定启动另一个 Linux 实例(这次是 Debian),看看它是否可能是环境问题。我安装了最新的单声道等。 运行 同一个应用程序实际上在 Ubuntu 实例上 运行 给了我更多信息:

Server does not exist or connection refused. ---> System.Net.Sockets.SocketException: Could not resolve host '<Host>\<Instance Name>'

以前我没有得到额外的 SocketException 说明它无法解析主机。我不知道为什么我没有在 Ubuntu 实例上获得此信息。

这导致我删除了连接字符串中的 Instance Name。完成此操作后,应用程序便开始按预期运行。