使用Mono时,Sql连接拒绝连接

本文关键字:连接 拒绝 Sql Mono 使用 | 更新日期: 2023-09-27 18:18:34

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

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

System.Data.SqlClient。SqlException:服务器不存在拒绝连接。at System.Data.SqlClient.SqlConnection.Open<0x409d4e90 + 0x0053f> in:0 atConsoleApplication1.Program。主要(系统。String[] args) <0x409a7d50 +0x00077> in:0 [ERROR] FATAL UNHANDLED EXCEPTION:System.Data.SqlClient.SqlException: Server不存在拒绝连接。at System.Data.SqlClient.SqlConnection.Open<0x409d4e90 + 0x0053f> in:0 atConsoleApplication1.Program。主要(系统。String[] args) <0x409a7d50 +0x00077> in:0

我已经尝试使用直接IP到SQL Server实例和外部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");
        }
    }
}
环境:

  • SQL Server: Windows 2012 DC with SQL Server 2014 Instance
  • Mono环境:Ubuntu 16.04运行最新Mono- complete
  • 。NET版本:4.6.2(也尝试过4.5.2)

更新:我可以确认使用FreeTDS我可以从Ubuntu实例连接到SQL Server的实例,因此问题似乎与运行应用程序隔离。

使用Mono时,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从连接字符串中移除。一旦完成这些操作,应用程序就开始按预期工作。