Получить и использовать строки подключения 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 в разделе "Настройки приложения" -> "Строки подключения". Изображение показано ниже
Api App -> Настройки приложения-> Строки подключения>
То, что я хотел сделать, я хотел поместить строку подключения в Azure и, как упоминал @Sandrino Di Mattia, динамически получать ее оттуда.
Шаги, которые работали для меня
- Создайте строки подключения в файле 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. Это безопасно удалить, поскольку мы не используем это.
Перейдите в 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;'
Перед третьим выпадающим меню выберите CUSTOM. Это важно, иначе Azure добавит System.Data.SqlClient (или любого другого поставщика в зависимости от того, что выбрано) в имя поставщика в строке подключения, которое нам не нужно.
- Сохранить
На этом этапе 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.
Благодаря десяткам постов и дополнительным снимкам кофе!