我创建了一个简单的程序来说明问题。我有一个应该连接到外部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");
}
}
}
环境:
更新 我可以确认使用FreeTDS我可以从Ubuntu实例连接到SQL Server实例,因此问题似乎与运行应用程序隔离。
答案 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
。一旦完成,应用程序就开始按预期工作。