Какова взаимосвязь между строками соединения Web.Config и строками соединения ServiceConfiguration в Azure? - PullRequest
2 голосов
/ 27 октября 2011

Я относительно новичок в Windows Azure, и мне нужно лучше понять, как платформа Azure обрабатывает параметры конфигурации строки подключения.

Предположим, у меня есть веб-проект ASP.Net, и в нем есть строка подключения Web.Config, подобная следующей:

    <add name="MyDb" connectionString="Data Source=NzSqlServer01;Initial Catalog=MyAzureDb;User ID=joe;Password=bloggs;"
  providerName="System.Data.SqlClient" />

Я использую эту строку подключения для локального тестирования и тому подобное. Давайте предположим, что у меня есть ServiceConfiguration.Local.cscfg файл, который содержит ту же информацию о соединении.

Теперь я готов к развертыванию в моем экземпляре Azure. Мой файл ServiceConfiguration.Cloud.cscfg выглядит так:

  <Setting name="MyDb" 
    value="Data Source=tcp:e54wn1clij.database.windows.net;Database=MyAzureDb{0};User ID=joe.bloggs@e54wn1clij;Password=reallysecure;Trusted_Connection=False;Encrypt=True;" />

Я пытаюсь понять, что если в моем веб-приложении есть код, который ищет строку подключения с именем «MyDb» (например, вызывая эту строку кода: ConfigurationManager.ConnectionStrings["CeraDb"].ConnectionString), Azure автоматически знает, что нужно искать базу данных под названием MyAzureDb1 или MyAzureDb2 на основе строки подключения файла ServiceConfiguration, или код веб-приложения просто ищет все, что находится в Web.Config, и не может правильно сбалансировать соединения базы данных с нагрузкой?

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Вам нужно вызвать RoleEnvironment.GetConfigurationSettingValue (...), чтобы прочитать его в ServiceConfiguration.Cloud.cscfg.

Преимущество использования .cscfg для хранения настроек заключается в том, что вы можете изменять их во время выполнения без необходимости развертывания нового кода. Web.config - это просто еще один файл, который является частью вашего приложения, поэтому вам необходимо развернуть новый пакет для его обновления, но параметры в .cscfg можно изменить на портале или загрузить новый файл .cscfg, не развертывая и не нарушая само приложение.

1 голос
/ 29 октября 2011

По сути, если вы не кодируете иначе, все экземпляры Azure создаются равными .В вашем случае это означает, что конфигурация для двух или более экземпляров одной и той же веб-роли будет одинаковой.

Таким образом, если вы ограждали свою базу данных и хотите, чтобы разные экземпляры считывали разные базы данных, вам нужно научиться умнее использовать код запуска и создать что-то, что выделяет осколок для экземпляра.У вас есть доступ к System.Environment.MachineName, который может различать код между экземплярами после их запуска.

Есть несколько способов сделать это.Можно, например, иметь центральный реестр в (скажем) хранилище таблиц, в котором хранится журнал времени последнего просмотра экземпляра для сегмента.Фоновый процесс на сервере периодически записывает в этот журнал.Затем, при запуске экземпляра, проверьте время последнего просмотра для каждого шарда - если какой-либо из них «устарел» (значительно старше, чем текущее время за вычетом интервала записи), то экземпляр знает, что может требовать этот шард для себя как старыйЭкземпляр умер.

(Тем не менее, существуют более эффективные способы разделения данных, обычно используемых вокруг вашей системы, например, самой большой таблицей в вашей системе.)

...