2014-12-08 6 views
5

최근에 Entity Framework에서 SQL Azure에서 연결을 복원하는 아주 쉬운 방법이 있음을 알았습니다. Dapper에서 같은 작업을 수행하는 데 권장되는 방법이 있습니까?SqlAzure에 대해 Dapper 탄력성을 만드는 방법은 무엇입니까?

+0

Dapper는 ADO.NET 주변의 래퍼입니다. 여기서 "탄력적"으로 만드는 것이 정확히 무엇입니까? 다르게하기를 원하는 것이 무엇입니까? –

+2

Azure로 인한 사소한 클라우드 문제를 극복하기 위해 Dapper에서 실행하는 모든 Execute 및 Query 호출을 원합니다. 이 링크를 따라 http://blogs.msdn.com/b/dotnet/archive/2013/10/17/net-framework-4-5-1-rtm-gt-start-coding.aspx 업그레이드하면됩니다. 내 프레임 워크 4.5.1 및 SQL Azure environmnet에 대한 ADO.Net 연결은 자동으로 복원력이 있습니까? –

+1

충분하지 않을 @JakobLithner가 없습니다. 이 링크는 연결 끊기에 대해서만 설명합니다. 주요 관심사 인 일시적인 오류는 언급하지 않습니다. –

답변

10

Azure에 대한 C#의 연결 문제를 방지하는 가장 빠른 방법은 Microsoft Transient Fault Handling Block입니다. ,

var retryStrategy = new FixedInterval(3, TimeSpan.FromSeconds(1)); 

var retryPolicy = 
    new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy); 

retryPolicy.ExecuteAction(() => myConnection.Open()); 

FixedInterval 백 오프 정책이 너무 :

예를 들어 아래의 코드는 윈도우 Azure SQL 데이터베이스에 대한 연결을 열려고 할 때 사이에서 1 개 초 간격으로 3 회 개까지 다시 시도하십시오 3 회 시도 할 때까지 1 초 정도 기다렸다가 다시 시도하십시오.

SqlDatabaseTransientErrorDetectionStrategy은 발생 된 예외를 검사하기 만하면됩니다. 다시 시도해야하는 연결 예외 인 경우 RetryPolicy에 작업을 다시 실행하라는 메시지가 표시됩니다. 접속 예외가 아닌 경우, 액션은 실행되지 않고, 원의 예외는 통상과 같이 슬로우됩니다.

언제 Dapper와 함께 사용해야합니까? 열기 연결 및 읽기 조작을 안전하게 다시 시도 할 수 있지만 삽입 복제가 발생하거나 행을 두 번 삭제하려고 할 때 쓰기 작업을 인식하거나 재 시도하십시오.

자세한 내용 here 자세한 라이브러리는 NuGet Package here 여기에는 Windows Azure의 검색 전략이 포함됩니다.

관련 문제