使用Mono时,Sql Connection拒绝连接

时间:2016-11-17 22:49:33

标签: c# mono ado.net system.data

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

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

  

System.Data.SqlClient.SqlException:服务器不存在或   拒绝连接。在System.Data.SqlClient.SqlConnection.Open()   < 0x409d4e90 + 0x0053f> in:0 at   ConsoleApplication1.Program.Main(System.String [] args)< 0x409a7d50 +   0x00077> in:0 [错误]致命未处理例外情况:   System.Data.SqlClient.SqlException:服务器不存在或   拒绝连接。在System.Data.SqlClient.SqlConnection.Open()   < 0x409d4e90 + 0x0053f> in:0 at   ConsoleApplication1.Program.Main(System.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:带有SQL Server 2014实例的Windows 2012 DC
  • 单声道环境:Ubuntu 16.04运行最新单声道完成
  • .NET版本:4.6.2(也尝试过4.5.2)

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

1 个答案:

答案 0 :(得分:0)

我决定启动另一个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。一旦完成,应用程序就开始按预期工作。