[c#] SQL 서버에 대한 연결 시간 초과

web.config? 에서 연결 문자열을 수정하여 시간 제한을 늘릴 수 있습니까 ?



답변

예, 연결 문자열에 추가 ;Connection Timeout=30하고 원하는 값을 지정할 수 있습니다.

Connection Timeout속성에 설정된 시간 제한 값 은 초 단위로 표시되는 시간 입니다. 이 속성이 설정되지 않은 경우 연결 시간 제한 값은 기본값 (15 초)입니다.

또한 제한 시간 값을로 설정하면 0연결 시도가 무한 시간 동안 대기하도록 지정합니다. 설명서에 설명 된대로 이는 연결 문자열에 설정해서는 안되는 사항입니다.

0 값은 제한이 없음을 나타내며 연결 시도가 무기한 대기하므로 ConnectionString에서 피해야합니다.


답변

흠 …

Darin이 말했듯이 더 높은 연결 시간 제한 값을 지정할 수 있지만 이것이 실제로 문제가 아닌 것 같습니다.

연결 시간 초과가 발생하면 일반적으로 다음 중 하나에 문제가 있습니다.

  1. 네트워크 구성-웹 서버 / 개발 상자와 SQL 서버 간의 느린 연결. 제한 시간을 늘리면이 문제를 해결할 수 있지만 근본적인 문제를 조사하는 것이 좋습니다.

  2. 연결 문자열. 잘못된 사용자 이름 / 암호가 어떤 이유로 “액세스 거부”를 나타내는 실제 오류 대신 시간 초과 오류를 제공하는 문제를 보았습니다. 이런 일이 일어나서는 안되지만 삶이 그렇습니다.

  3. 연결 문자열 2 : 서버 이름을 잘못 지정하거나 불완전하게 지정하는 경우 (예 : mysqlserver대신 mysqlserver.webdomain.com) 시간 초과가 발생합니다. 명령 줄에서 연결 문자열에 지정된대로 정확히 서버 이름을 사용하여 서버를 ping 할 수 있습니까 ?

  4. 연결 문자열 3 : 서버 이름이 DNS (또는 호스트 파일)에 있지만 올바르지 않거나 액세스 할 수없는 IP를 가리키는 경우 시스템을 찾을 수 없음 오류가 아닌 시간 초과가 발생합니다.

  5. 호출중인 쿼리가 시간 초과되었습니다. 서버에 대한 연결이 문제인 것처럼 보일 수 있지만 앱의 구조에 따라 제한 시간이 발생하기 전에 쿼리가 실행되는 단계까지 연결될 수 있습니다.

  6. 연결 누출. 얼마나 많은 프로세스가 실행되고 있습니까? 열린 연결은 몇 개입니까? 원시 ADO.NET이 연결 풀링을 수행하는지, 엔터프라이즈 라이브러리에서 필요할 때 자동으로 연결을 닫는 지 또는 모든 것이 구성된 위치인지 확실하지 않습니다. 이것은 아마도 붉은 청어 일 것입니다. 그러나 WCF 및 웹 서비스로 작업 할 때 닫히지 않은 연결에 문제가 발생하여 시간 초과 및 기타 예측할 수없는 동작이 발생했습니다.

시도 할 사항 :

  1. SQL Management Studio를 사용하여 서버에 연결할 때 시간 초과가 발생합니까? 그렇다면 네트워크 구성이 문제 일 수 있습니다. Management Studio에 연결할 때 문제가 없으면 서버가 아닌 앱에 문제가있는 것입니다.

  2. SQL 프로파일 러를 실행하고 실제로 어떤 일이 발생하는지 확인하십시오. 실제로 연결 중인지 아니면 쿼리가 문제인지 알 수 있어야합니다.

  3. Management Studio에서 쿼리를 실행하고 걸리는 시간을 확인합니다.

행운을 빕니다!


답변

동적으로 변경하려면 SqlConnectionStringBuilder 사용하는 것이 좋습니다.

ConnectionString 즉, 문자열을 Object 클래스로 변환 할 수 있습니다. 모든 연결 문자열 속성은 해당 Member가됩니다.

이 경우 실제 이점은 ConnectionTimeout 문자열 부분이 연결 문자열에 이미 존재하는지 여부에 대해 걱정할 필요가 없다는 것입니다.

또한 객체를 생성하고 문자열을 조작하는 대신 객체에 값을 할당하는 것이 항상 좋습니다.

다음은 코드 샘플입니다.

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);


답변