2013-06-20 2 views
1

하늘빛 asp.net 웹 사이트에서 SQL Azure를 사용합니다. 가끔씩 SQL aerver 연결이 열리지 않고 (로컬 및 라이브 사이트에서)이 예외 메시지가 표시됩니다.SQL Azure의 연결 시간 제한

연결 시간 제한이 만료되었습니다. 로그인 후 단계에서 경과 된 시간 초과 기간. 서버가 로그인 프로세스를 완료하고 응답하기를 기다리는 동안 연결이 시간 초과되었을 수 있습니다. 또는 여러 활성 연결을 만들려고 시도하는 동안 시간이 초과되었을 수 있습니다.

누군가 이러한 문제의 원인과 이에 대한 적절한 해결책을 설명 할 수 있습니까?

+1

연결 시도를 다시 시도하십시오. 이것이 Azure 용 일시적 오류 처리 응용 프로그램 블록이있는 이유입니다. – sharptooth

+0

이것은 답변이어야합니다. – Craig

답변

4

Sharptooth가 그의 코멘트에 표시했습니다. SQL Azure에서 일시적 오류가 더 자주 발생합니다. Microsoft는 공통 연결 문제를 해결하는 Transient Fault Handling Block을 제공했습니다. 탐지 전략을 정의하고 정책을 재 시도 할 수 있습니다.

일시적 오류 처리 블록이 수행하는 작업에 대한 간략한 설명은 HERE을, 응용 프로그램에 추가하는 방법은 HERE을 참조하십시오 (고맙게도 NuGet을 사용할 수 있음).

처리 블록은 주로 연결 주변의 try/catch 블록처럼 작동합니다. DetectionStrategy을 사용하여 공통 연결 오류를 포착 한 다음 오류가 전략에 언급 된 것과 일치하는 경우 연결을 재 시도합니다.

LinqToSQL을 작업 공간 패턴과 함께 사용합니다. 우리는 지금 잠시 동안 블록을 사용했다

private const int DELAYMILLISECONDS = 250; 

private const int MAXRETRIES = 10; 

public static ApplicationDatabaseDataContext Create(string connectionString) 
{ 
    var policy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(
     MAXRETRIES, 
     TimeSpan.FromMilliseconds(DELAYMILLISECONDS)); 

    var applicationDatabaseDataContext = 
     policy.ExecuteAction(() => GetDataContext(connectionString)); 

    return applicationDatabaseDataContext; 
} 

그것은 우리를 위해 이러한 문제의 대부분을 완화 : 우리의 연결을 포장 블록은 다음과 같습니다.