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");
}
}
}
环境:
- SQL 服务器:Windows 2012 DC with SQL Server 2014 Instance
- Mono 环境:Ubuntu16.04 运行ning 最新的 Mono-Complete
- .NET版本:4.6.2(也试过4.5.2)
更新:
我可以确认使用 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
。完成此操作后,应用程序便开始按预期运行。
我创建了一个简单的程序来说明问题。我有一个应该连接到外部 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");
}
}
}
环境:
- SQL 服务器:Windows 2012 DC with SQL Server 2014 Instance
- Mono 环境:Ubuntu16.04 运行ning 最新的 Mono-Complete
- .NET版本:4.6.2(也试过4.5.2)
更新: 我可以确认使用 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
。完成此操作后,应用程序便开始按预期运行。