2016-11-17 6 views
0

Я создал простую программу для иллюстрации проблемы. У меня есть консольное приложение, которое должно подключаться к внешнему экземпляру SQL Server.Sql Connection отказывается подключаться при использовании Mono

Локально я могу подключиться к этому хосту просто отлично (нужно ли установить IP-адрес или внешний URL-адрес, с которым сервер связан через DNS). Когда я копирую скомпилированные версии приложения к серверу Ubuntu с установленным Mono и запустить приложение с помощью mono ConsoleApplication1.exe, я представил с этим каждый раз ошибки:

System.Data.SqlClient.SqlException: Сервер не существует или подключение не был. на System.Data.SqlClient.SqlConnection.Open() < 0x409d4e90 + 0x0053f> в: 0 в ConsoleApplication1.Program.Main (System.String [] арг) < 0x409a7d50 + 0x00077> в: 0 [ERROR] СМЕРТЕЛЬНОЙ необработанное ИСКЛЮЧЕНИЕ: System.Data.SqlClient.SqlException: сервер не существует или соединение отказано. на System.Data.SqlClient.SqlConnection.Open() < 0x409d4e90 + 0x0053f> в: 0 в ConsoleApplication1.Program.Main (System.String [] арг) < 0x409a7d50 + 0x00077> в: 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 с экземпляром SQL Server 2014
  • Mono Окружающая среда: Ubuntu 16.04 работает Latest Mono-Complete
  • .NET Версия: 4.6.2 (также пытался 4.5.2)

Update: Я могу подтвердить, что с помощью FreeTDS я могу подключиться к экземпляру SQL Server из экземпляра Ubuntu, поэтому проблема кажется изолированной для запуска приложения.

+0

Можно ли подключить какое-либо другое программное обеспечение к вашей системе Ubuntu? – Dai

+0

До сих пор я проверил, что машина Ubuntu может telnet этого хоста и этого порта и получить ответ, я попытаюсь использовать что-то вроде бесплатных tds, чтобы увидеть, может установить соединение TSQL. –

+0

. Показывает ли ваш журнал SQLServer соединение? Любая ошибка? – SushiHangover

ответ

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 со строки подключения. Как только это было сделано, приложение начало работать, как ожидалось.

+0

Когда вы удалили имя экземпляра, сохранили ли вы остальную строку соединения «как есть»? Работает ли обновленная версия как в Ubuntu, так и в Linux? – oarevalo

+0

Из того, что я помню (проверяя мою память), я оставил его, так же как и удаление имени экземпляра. Это было в экземпляре Ubuntu 16.04 в то время, я не могу говорить, как это было бы в любом другом дистрибутиве. Извините, не может быть больше пользы –

+0

спасибо. У меня такая же проблема, но в моем случае удаление имени экземпляра не помогло. Он просто изменил сообщение об ошибке на «Mono.Data.Tds.Protocol.TdsInternalException: сервер закрыл соединение ...» – oarevalo