2012-12-10 2 views
3

먼저 특정 문제를 검색하여 내 문제의 원인을 찾을 수없는 것으로 모든 사람에게 알리고 싶습니다.SQL Server 연결 제한 시간 C#

네트워크 컴퓨터에서 실행중인 SQL Server 2008 인스턴스와이 서버에 연결하여 작성한 클라이언트가 있습니다.

연결하려면 SQL Server 2008 인스턴스에 대한 연결을 설정하고 서버에 대해 실행 한 쿼리의 결과로 채워진 DataTable을 반환하는 작은 세그먼트 코드가 있습니다. 어쨌든 문제는 프로그램을 열고이 메서드를 호출 할 때마다 연결 문자열에서와 같이 연결 시간 제한 값을 설정 한 것과 관계없이 내 메서드를 처음 호출 할 때 약 15 초가 소요되고 시간이 초과됩니다 . 엽기적으로 내가 만든 두 번째 또는 세 번째 호출은 문제없이 작동합니다.

How to Open firewall ports for SQL Server 서버 컴퓨터에서 SQL Server 용 포트를 열고이 포트가 올바르게 구성되었는지 확인했습니다. 누구든지 내 코드에서 특정 문제를 볼 수 있습니까?

string _connectionString = "Server=" + @Properties.Settings.Default.sqlServer + "; Initial Catalog=" + @Properties.Settings.Default.sqlInitialCatalog + 
     ";User Id=" + @Properties.Settings.Default.sqlUsername + ";Password=" + @Properties.Settings.Default.sqlPassword + "; Connection Timeout=1"; 

    private DataTable ExecuteSqlStatement(string command) 
    { 
     using (SqlConnection conn = new SqlConnection(_connectionString)) 
     { 
      try 
      { 
       conn.Open(); 
       using (SqlDataAdapter adaptor = new SqlDataAdapter(command, conn)) 
       { 
        DataTable table = new DataTable(); 
        adaptor.Fill(table); 
        return table; 
       } 
      } 
      catch (SqlException e) 
      { 
       throw e; 
      } 
     } 
    } 

내 캐치에 걸려 SQLException으로는 "제한 시간이 만료 제한 시간은 작업 완료하기 전에 경과 또는 서버가 응답하지 않습니다.."

이것은 conn.Open()에서 발생합니다. 내가 포함 된 코드 스 니펫의 줄. 누구든지 위대한 수있는 아이디어가 있다면!

부록 서버에 ping을 실행하면 응답 시간이 10 분이 걸리는 <입니다. 또한 SQL Server Management Studio를 사용할 때도 동일한 동작이 나타납니다. (생각 만해도이 문제를 작성한 후 방금 시도했습니다.) SQL Server Management Studio를 사용할 때 두 가지 시도가 필요하므로 코드 문제와는 달리 네트워크 문제 여야합니다. 연결 오류에 대한 오류 검사를 구현 한 다음 연결을 다시 시도 할 수 있음을 알았지 만 (문제는 해결해야 함) 근본적인 문제를 해결하지 못하기 때문에이 문제가 나에게 '깨끗한'것처럼 보일 수 없습니다. 누구든지이 문제에 대해 경험이 있습니까?

편집 년 이상 나중에이 질문에 4000 회 이상 확인되었습니다 만, 나는 이후 나는/생각/방화벽 포트가 열리고 있지만, 실제로되지 않았 음을 발견했습니다. 나는 틀림없이 Windows에서 방화벽을 SQL Server가 사용하는 포트 번호로 열어야한다고 가정했는데, 제 경우에는 TCP 포트 1433에서 연결을 허용하도록 설정했습니다. 방화벽은 초기 연결을 시도 할 때 문제를 일으켰습니다.

설정하는 올바른 방법은 SQL Server 인스턴스 실행 파일을 허용하도록 Windows 방화벽을 설정하는 것입니다. 이렇게하려면 Windows 방화벽에서 프로그램을 추가하고과 같이 sql 인스턴스가있는 폴더로 이동 한 다음 sqlservr.exe 파일을 방화벽 규칙에 추가해야합니다.

+0

연결 문자열에서 연결 시간 초과 매개 변수를 완전히 제거하면 어떻게됩니까? –

+0

_command_ timeout도 변경 했습니까? – Oded

+0

제안에 감사드립니다.기본 타임 아웃으로는 충분하지 않습니다. 기본값 인 15 초에서 60 초로 제한 시간을 늘려야했습니다. 사용중인 네트워크가 클라이언트에서 서버까지 대기 시간이 매우 짧습니다 (약 10ms 미만)는 여전히 이상한 문제입니다. 서버 이름을 확인하기 위해 잠시 sqlconnection을 사용하는 것으로 추측됩니다. 그게 내가 생각할 수있는 전부 야. –

답변

4

연결 시간 제한 값을 1 초로 설정합니다. 연결 문자열에서 제거하고 다시 시도하십시오.

또는 사용중인 SQL 선택 문제 일 수 있습니다. 오랜 시간이 걸릴 수 있습니다. 그렇다면 두 번째 및 세 번째 호출은 캐시 된 값을 검색하므로 훨씬 빠르게 실행됩니다.

+0

Hrm, 연결 시간 초과를 60으로 늘림. 클라이언트와 서버 간의 대기 시간이 거의 존재하지 않기 때문에 여전히 기괴한 문제입니다. 내가 생각할 수있는 유일한 점은 조회가 잠시 걸리는 것입니다. –

+1

@ Termin8tor 여기서 볼 수있는 것은 연결 풀 (http://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.80).aspx)입니다. 첫 번째 연결에서 준비 작업이 많이 이루어집니다. 그 이후에 모든 의도와 목적이 즉시 연결됩니다. – briantyler

+0

@ 암소의 입 - 아! 그게 설명해! 그 정보를 주셔서 감사합니다. 매우 유용합니다! 지금은 그것을 통해 읽었을뿐입니다. 정확히 내가 느끼고있는 행동을 유발하는 것 같습니다. 통찰력에 감사드립니다! –