Экспорт (0) Печать
Развернуть все

Инструкции подключиться к базе данных SQL Azure с использованием ADO.NET

Обновлено: Ноябрь 2014 г.

Используйте ADO.NET для подключения к базе данных SQL Microsoft Azure. В отличие от локального подключения необходимо учитывать регулирование или другие ошибки службы, которые могут завершить подключение или временно заблокировать новые подключения. Это состояние называется неустойчивой неисправностью. Для управления неустойчивыми неисправностями реализуется стратегия повторов. При подключении к базе данных SQL Azure в блоке Transient Fault Handling Application Block, части библиотеки "Enterprise Library 6 — апрель 2013 г." имеются стратегии обнаружения, которые определяют состояние неустойчивой неисправности. Дополнительные сведения см. в Инструкции Надежное подключение к базе данных SQL Azure.

Подключение ADO.NET к базе данных SQL Azure аналогично локальному подключению за исключением того, что реализуется стратегия повторов и используется ReliableSqlConnection. Функциональность повторов и класс ReliableSqlConnection являются частью блока Transient Fault Handling Application Block.

Сведения об установке блока Transient Fault Handling Application Block см. в разделе How to install Transient Fault Handling Application Block 6.0.

Использование Transient Fault Handling Application Block 6.0

  1. Определите стратегию повторов Exponential Backoff (Экспоненциальная задержка) для регулирования базы данных SQL Azure. Стратегия экспоненциальной задержки будет корректно задерживать нагрузку на службу.

    ExponentialBackoff exponentialBackoffStrategy = 
                    new ExponentialBackoff("exponentialBackoffStrategy",
                        retryCount,
                        TimeSpan.FromMilliseconds(minBackoffDelayMilliseconds), 
                        TimeSpan.FromMilliseconds(maxBackoffDelayMilliseconds),
                        TimeSpan.FromMilliseconds(deltaBackoffMilliseconds));
    
    
  2. Установите экспоненциальную задержку в качестве стратегии по умолчанию.

    RetryManager manager = new RetryManager(new List<RetryStrategy>
    {
    exponentialBackoffStrategy 
    }, 
    " exponentialBackoffStrategy");
    
    
  3. Настройте диспетчер повторов по умолчанию. Объект RetryManager предоставляет функциональность повторов.

    RetryManager.SetDefault(manager);
    
    
  4. Определите политику повторов подключения к SQL по умолчанию и политику повторов команды SQL по умолчанию. Политика предоставляет механизм повторов для ненадежных действий и переходных состояний.

    RetryPolicy retryConnectionPolicy = manager.GetDefaultSqlConnectionRetryPolicy();
    RetryPolicy retryCommandPolicy = manager.GetDefaultSqlCommandRetryPolicy();
    
    
  5. Создайте функцию, которая будет повторять попытку подключения с помощью ReliableSqlConnection.

    retryConnectionPolicy.ExecuteAction(() =>
                {
      using (ReliableSqlConnection connection = new   
      ReliableSqlConnection(builder.ConnectionString)) …
    
    
  6. Создайте функцию, которая будет повторять попытки вызова команды ExecuteCommand() из ReliableSqlConnection.

    retryCommandPolicy.ExecuteAction(() =>
    {
    using (IDataReader reader = connection.ExecuteCommand<IDataReader>(command)) …
    
    

static void Main(string[] args)
        {
            //NOTE: Use appropriate exception handling in a production application.

            //Replace
            //  builder["Server"]: {servername} = Your Azure SQL Database server name
            //  builder["User ID"]: {username}@{servername} = Your Azure SQL Database user name and server name
            //  builder["Password"]: {password} = Your Azure SQL Database password

            System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
            builder["Server"] = "{servername}";
            builder["User ID"] = "{username}@{servername}";
            builder["Password"] = "{password}";

            builder["Database"] = "AdventureWorks2012";
            builder["Trusted_Connection"] = false;
            builder["Integrated Security"] = false;
            builder["Encrypt"] = true;

            //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.
            RetryPolicy retryConnectionPolicy = manager.GetDefaultSqlConnectionRetryPolicy();
            RetryPolicy retryCommandPolicy = manager.GetDefaultSqlCommandRetryPolicy();

            //5. Create a function that will retry the connection using a ReliableSqlConnection.
            retryConnectionPolicy.ExecuteAction(() =>
            {
                using (ReliableSqlConnection connection = new ReliableSqlConnection(builder.ConnectionString))
                {
                    connection.Open();

                    IDbCommand command = connection.CreateCommand();
                    command.CommandText = "SELECT Name FROM Production.Product";

                    //6. Create a function that will retry the command calling ExecuteCommand() from the ReliableSqlConnection
                    retryCommandPolicy.ExecuteAction(() =>
                    {
                        using (IDataReader reader = connection.ExecuteCommand<IDataReader>(command))
                        {
                            while (reader.Read())
                            {
                                string name = reader.GetString(0);

                                Console.WriteLine(name);
                            }
                        }
                    });                  
                }
            });

            Console.ReadLine();
        }

При соединении с базой данных в База данных SQL Azure с помощью приложения ADO.NET учитывайте следующие соображения.

  • Предотвращайте атаки по принципу внедрения кода с применением класса SqlConnectionStringBuilder. Он предоставляется в составе платформы .NET Framework в целях упрощения создания строки подключения. Дополнительные сведения см. в разделе Построители строк подключения (ADO.NET).

  • Строка подключения становится источником потенциальной уязвимости. Дополнительные сведения о защите строки подключения см. в разделе Защита сведений о соединении (ADO.NET).

  • Шифруйте свои соединения, особенно при подключении к База данных SQL Azure через Интернет, чтобы сделать невозможным осуществление атаки путем перехвата сообщений. Задайте свойству «Шифровать соединение» значение True (Encrypt = True). Задайте свойству соединения TrustServerCertificate значение False (TrustServerCertificate = False).

  • Общие сведения о подключении к базе данных в База данных SQL Azure см. в разделе Рекомендации по соединению с базой данных SQL Azure и в технической статье Устойчивость простаивающего подключения.

  • При открытии подключения к База данных SQL Azure установите время ожидания соединения равным 30 секундам.

См. также

Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2015 Microsoft