Получить и использовать строки подключения Windows Azure?

Я настроил строки подключения в портале управления Azure. Настройка-> Строки подключения (связанные ресурсы):

Для чего нужны эти строки подключения?

Я попытался удалить соединение. строки из файла web.config, поэтому он должен читать отсюда, но это не так.

Есть ли другой путь?

По сути, я хочу, чтобы эти строки подключения переопределяли строки подключения в web.config для использования в производственной среде.

Я добавил следующее к Application_Start метод:

var sb = new StringBuilder();
var appConfig = ConfigurationManager.OpenMachineConfiguration();  
foreach (ConnectionStringSettings conStr in appConfig.ConnectionStrings.ConnectionStrings)
  sb.AppendFormat("Name: {0}, ConnectionString: {1}\n", conStr.Name, conStr.ConnectionString);
throw new Exception(sb.ToString());

Вот результат:

Имя: LocalSqlServer, ConnectionString: источник данных =.\SQLEXPRESS; Интегрированная безопасность =SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf; Экземпляр пользователя =true

Я попробовал выше с ConfigurationManager.ConnectionStrings а также и строки подключения к серверу (Azure) не было.

2 ответа

Решение

Строки подключения на портале позволяют переопределить строки подключения, определенные в файле web.config.

Когда вы разрабатываете локально, вы, вероятно, используете базу данных, расположенную в localhost\SQLExpress или что-то подобное. Если вы развертываете без настройки преобразования web.config, это будет означать, что ваш веб-сайт, работающий в Windows Azure, все равно будет указывать на localhost\SQLExpress, а это не то, что вам нужно.

Строки подключения на портале позволяют переопределить существующие строки подключения, которые уже определены в файле web.config. Если ваш файл web.config не содержит строку подключения с тем же именем, которое указано в портале, он не будет добавлен и будет доступен во время выполнения. Это может быть проблема, которую вы испытываете.

Чтобы это исправить, просто добавьте строку подключения в ваш файл web.config с тем же именем, которое вы уже добавили на портал.

Обновление: Как я уже объяснил в комментарии, веб-сайты Windows Azure физически не изменяют файл web.config ( источник), они делают это во время выполнения. Поэтому, чтобы проверить, какие AppSettings и ConnectionStrings действительно доступны во время выполнения, попробуйте это:

контроллер:

public ActionResult Index()
{
  ViewBag.ConnectionStrings =
    ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>();
  ViewBag.AppSettings = ConfigurationManager.AppSettings;
  return View();
}

Посмотреть:

<h3>ConnectionStrings:</h3>
<ul>
  @foreach (var setting in ViewBag.ConnectionStrings)
  {
    <li>@setting.Name: @setting.ConnectionString</li>
  }
</ul>
<h3>AppSettings:</h3>
<ul>
  @foreach (var s in ViewBag.AppSettings)
  {
    <li>@setting: @System.Configuration.ConfigurationManager.AppSettings[s]</li>
  }
</ul>

Через два дня мне наконец удалось заставить его работать. Я добавляю свое решение здесь, надеясь, что оно может помочь кому-то в будущем.

Среда

  • Приложение Azure API (но теоретически оно должно работать и для других типов проектов)
  • БД SQL (размещена на Azure). Это может быть очевидно любой БД
  • EF 6.0 - База данных Первый подход
  • Строка подключения хранится в Azure в разделе "Настройки приложения" -> "Строки подключения". Изображение показано ниже

Снимок из Azure -> Api App -> Настройки приложения-> Строки подключения Api App -> Настройки приложения-> Строки подключения>

То, что я хотел сделать, я хотел поместить строку подключения в Azure и, как упоминал @Sandrino Di Mattia, динамически получать ее оттуда.

Шаги, которые работали для меня

  1. Создайте строки подключения в файле web.config

`

<connectionStrings>
    <add name="dbConnectionStringForAzure" connectionString="Local Connection String" providerName="System.Data.EntityClient"/>
  </connectionStrings>

`

Обратите внимание, что providerName является System.Data.EntityClient, а не System.Data.SqlClient.

Дополнительный бит: Кроме того, после публикации проекта вы можете проверить, что строка подключения в файле web.config. Перейдите к projectorapiurl.scm.azurewebsites.net.

Перейдите в Меню -> Консоль отладки -> PowerShell -> Изменить файл Web.config. (Есть и другие способы получить файлы web.config. Используйте тот, который вы предпочитаете.)

Примечание. Здесь вы можете найти другую автоматически сгенерированную строку подключения Azure. Это безопасно удалить, поскольку мы не используем это.

  1. Перейдите в Azure -> ваш проект и настройки приложения. Добавьте детали, как показано ниже:

    Имя = dbConnectionStringForAzure

    Значение = Provider=System.Data.SqlClient; metadata=res://*/csdlModel.csdl|res://*/ssdlModel.ssdl|res://*/mslModel.msl; Provider Connection String ='Data Source=server.database.windows.net,1433;initial catalog=database;User ID=username;Password=password;MultipleActiveResultSets=True;App=EntityFramework;'

  2. Перед третьим выпадающим меню выберите CUSTOM. Это важно, иначе Azure добавит System.Data.SqlClient (или любого другого поставщика в зависимости от того, что выбрано) в имя поставщика в строке подключения, которое нам не нужно.

  3. Сохранить

На этом этапе Azure следует использовать эту строку подключения во время выполнения. Хотите проверить!? сделать то же самое, что предложено выше @Sandrino Di Mattia или в этой статье SO @Shaun Luttin. Получить строку подключения базы данных SQL Azure, которая связана с веб-сайтом Windows Azure с помощью C#.NET.

В качестве альтернативы, поместите приведенный ниже код в любой шаблон бритвы:

    <p>Value of dbConnectionStringForAzure  :
    @System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionStringForAzure"].ConnectionString    
    </p>

С другой стороны, я установил имя строки подключения в своем конструкторе DbContext.

        public MyEntities() : base("name=dbConnectionStringForAzure")
        {

        }

Теперь, когда я позвонил своему API, он динамически использовал соединение, хранящееся в Azure.

Благодаря десяткам постов и дополнительным снимкам кофе!

Другие вопросы по тегам