2016-11-17 8 views
0

문제를 설명하기 위해 간단한 프로그램을 만들었습니다. 외부 SQL Server 인스턴스에 연결해야하는 콘솔 응용 프로그램이 있습니다.Sql Connection이 Mono를 사용할 때 연결을 거부합니다.

로컬로이 호스트에 연결할 수 있습니다. 서버가 DNS를 통해 연결된 IP 주소 나 외부 URL로 설정되었는지 여부는 문제가 없습니다.

System.Data.SqlClient.SqlException : 서버가 존재하지 않는 모노를 설치하고 mono ConsoleApplication1.exe를 사용하여 응용 프로그램을 실행으로 나는 우분투 서버에 응용 프로그램의 컴파일 된 버전 위에 복사 할 때이 오류가 매번되게하고 또는 연결이 거부되었습니다. System.Data.SqlClient.SqlConnection.Open()에서 < 0x409d4e90 + 0x0053f>에서 0 [ERROR] FATAL 미처리 : 0 ConsoleApplication1.Program.Main (선택 System.String [] 인수) < 0x409a7d50 + 0x00077>에서 예외 : System.Data.SqlClient.SqlException : 서버가 없거나 연결이 거부되었습니다. System.Data.SqlClient.SqlConnection.Open()에서 < 0x409d4e90 + 0x0053f>에서 0

: 0 ConsoleApplication1.Program.Main (선택 System.String [] 인수) < 0x409a7d50 + 0x00077>에서

SQL Server 인스턴스에 대한 직접 IP와 아래에 설명 된 외부 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 서버 : 윈도우 2012 DC SQL Server 2014 인스턴스가있는 인스턴스
  • 모노 환경 : 우분투 16.04 최신 모노 완성
  • .NET 버전 실행 : 4.6.2 (도 시도 4.5.2)

업데이트 : 내가 FreeTDS를를 사용하는 것이 내가 연결할 수 있는지 확인할 수 있습니다 우분투 인스턴스에서 SQL Server 인스턴스로 이동하면 문제가 응용 프로그램을 실행하는 것과 격리 된 것처럼 보입니다.

+0

우분투 시스템의 다른 소프트웨어에 연결할 수 있습니까? – Dai

+0

지금까지 필자는 Ubuntu 머신이 telnet으로 호스트와 그 포트를 인식하고 응답을 받았음을 확인했습니다. 무료 tds와 같은 것을 사용하여 TSQL 연결을 설정할 수 있습니다. –

+0

SQLServer 로그에 연결이 표시됩니까? 오류가 있습니까? – SushiHangover

답변

0

다른 Linux 인스턴스 (이번에 데비안)를 설치하여 환경 문제가 될 수 있는지 알아보기로했습니다.

Server does not exist or connection refused. ---> System.Net.Sockets.SocketException: Could not resolve host '<Host>\<Instance Name>' 

이전에 내가하지 않았다 여분의 SocketException이 호스트를 해결할 수 없다는 : 사실은 나에게 다음 우분투 인스턴스에서 실행되는 자세한 정보를 준 동일한 응용 프로그램을 실행하는 최신 모노 등을 설치했다. 왜 우분투 인스턴스에서이 정보를 얻지 못했는지 나는 모른다.

이렇게하면 Instance Name 연결 문자열을 제거 할 수있었습니다. 이 작업이 완료 되 자마자 응용 프로그램이 예상대로 작동하기 시작했습니다.

+0

인스턴스 이름을 제거하면 나머지 연결 문자열을 "있는 그대로"유지 했습니까? 업데이트 된 버전이 우분투와 리눅스 모두에서 작동합니까? – oarevalo

+0

내가 기억하는 (기억을 테스트 해보니) 인스턴스 이름을 제거하는 것 외에도 떠났다. 이것은 당시 우분투 인스턴스 16.04에 있었지만 다른 배포판에서 어떻게 될지 말할 수는 없습니다. 죄송합니다 더 이상 사용할 수 없습니다 –

+0

감사합니다. 나도 같은 문제가 있지만 내 경우에는 인스턴스 이름을 제거하는 데 도움이되지 않았다. 그것은 단지 오류 메시지를''Mono.Data.Tds.Protocol.TdsInternalException : 서버 연결을 닫았습니다 .... ' – oarevalo