private void InitRetryPolicy() { // Get an instance of the RetryManager class. _retryManager = _retryManager ?? RetryPolicyFactory.CreateDefault(); _connRetryPolicy = _retryManager.GetDefaultSqlConnectionRetryPolicy(); _cmdRetryPolicy = _retryManager.GetDefaultSqlCommandRetryPolicy(); }
/// <summary> /// Initialize the Sql Azure settings and connections /// </summary> public void InitializeSqlAzure() { this.SqlConnectionString = ConfigurationManager.AppSettings["SqlAzureConnectionString"]; if (String.IsNullOrWhiteSpace(this.SqlConnectionString)) { throw new ArgumentException("A required AppSetting cannot be null or empty", "SqlAzureConnectionString"); } this.SqlTableName = ConfigurationManager.AppSettings["SqlAzureTableName"]; if (String.IsNullOrWhiteSpace(this.SqlTableName)) { throw new ArgumentException("A required AppSetting cannot be null or empty", "SqlAzureTableName"); } var columns = ConfigurationManager.AppSettings["SqlAzureTableColumns"]; if (String.IsNullOrWhiteSpace(columns)) { throw new ArgumentException("A required AppSetting cannot be null or empty", "SqlAzureTableColumns"); } this.SqlTableColumns = columns.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries).Select(c => c.Trim()).ToList(); //Reference: https://msdn.microsoft.com/en-us/library/azure/dn864744.aspx //1. Define an Exponential Backoff retry strategy for Azure SQL Database throttling (ExponentialBackoff Class). An exponential back-off strategy will gracefully back off the load on the service. int retryCount = 4; int minBackoffDelayMilliseconds = 2000; int maxBackoffDelayMilliseconds = 8000; int deltaBackoffMilliseconds = 2000; ExponentialBackoff exponentialBackoffStrategy = new ExponentialBackoff("exponentialBackoffStrategy", retryCount, TimeSpan.FromMilliseconds(minBackoffDelayMilliseconds), TimeSpan.FromMilliseconds(maxBackoffDelayMilliseconds), TimeSpan.FromMilliseconds(deltaBackoffMilliseconds)); //2. Set a default strategy to Exponential Backoff. RetryManager manager = new RetryManager( new List <RetryStrategy> { exponentialBackoffStrategy }, "exponentialBackoffStrategy"); //3. Set a default Retry Manager. A RetryManager provides retry functionality, or if you are using declarative configuration, you can invoke the RetryPolicyFactory.CreateDefault RetryManager.SetDefault(manager); //4. Define a default SQL Connection retry policy and SQL Command retry policy. A policy provides a retry mechanism for unreliable actions and transient conditions. ConnectionRetryPolicy = manager.GetDefaultSqlConnectionRetryPolicy(); CommandRetryPolicy = manager.GetDefaultSqlCommandRetryPolicy(); //5. Create a function that will retry the connection using a ReliableSqlConnection. InitializeSqlAzureConnection(); }
/// <summary> /// Initialize the Sql Azure settings and connections /// </summary> public void InitializeSqlAzure() { this.SqlConnectionString = ConfigurationManager.AppSettings["SqlAzureConnectionString"]; if(String.IsNullOrWhiteSpace(this.SqlConnectionString)) { throw new ArgumentException("A required AppSetting cannot be null or empty", "SqlAzureConnectionString"); } this.SqlTableName = ConfigurationManager.AppSettings["SqlAzureTableName"]; if (String.IsNullOrWhiteSpace(this.SqlTableName)) { throw new ArgumentException("A required AppSetting cannot be null or empty", "SqlAzureTableName"); } var columns = ConfigurationManager.AppSettings["SqlAzureTableColumns"]; if (String.IsNullOrWhiteSpace(columns)) { throw new ArgumentException("A required AppSetting cannot be null or empty", "SqlAzureTableColumns"); } this.SqlTableColumns = columns.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries).Select(c => c.Trim()).ToList(); //Reference: https://msdn.microsoft.com/en-us/library/azure/dn864744.aspx //1. Define an Exponential Backoff retry strategy for Azure SQL Database throttling (ExponentialBackoff Class). An exponential back-off strategy will gracefully back off the load on the service. int retryCount = 4; int minBackoffDelayMilliseconds = 2000; int maxBackoffDelayMilliseconds = 8000; int deltaBackoffMilliseconds = 2000; ExponentialBackoff exponentialBackoffStrategy = new ExponentialBackoff("exponentialBackoffStrategy", retryCount, TimeSpan.FromMilliseconds(minBackoffDelayMilliseconds), TimeSpan.FromMilliseconds(maxBackoffDelayMilliseconds), TimeSpan.FromMilliseconds(deltaBackoffMilliseconds)); //2. Set a default strategy to Exponential Backoff. RetryManager manager = new RetryManager( new List<RetryStrategy> { exponentialBackoffStrategy }, "exponentialBackoffStrategy"); //3. Set a default Retry Manager. A RetryManager provides retry functionality, or if you are using declarative configuration, you can invoke the RetryPolicyFactory.CreateDefault RetryManager.SetDefault(manager); //4. Define a default SQL Connection retry policy and SQL Command retry policy. A policy provides a retry mechanism for unreliable actions and transient conditions. ConnectionRetryPolicy = manager.GetDefaultSqlConnectionRetryPolicy(); CommandRetryPolicy = manager.GetDefaultSqlCommandRetryPolicy(); //5. Create a function that will retry the connection using a ReliableSqlConnection. InitializeSqlAzureConnection(); }