it-swarm.com.ru

Строка подключения к базе данных функций Azure

Как добавить файл app.config или получить к нему доступ к функциям Azure, чтобы добавить строку подключения к базе данных? Если вы не должны добавлять app.config и есть лучший способ получить доступ к внешней базе данных для выполнения функции, пожалуйста, дайте мне знать лучшие практики. Спасибо!

40
Lereveme

Лучший способ сделать это - добавить строку подключения с портала Azure:

  • В пользовательском интерфейсе приложения функции нажмите «Настройки приложения функции».
  • Настройки/Настройки приложения
  • Добавить строки подключения

Затем они будут доступны с использованием той же логики, как если бы они были в web.config, например.

var conn = System.Configuration.ConfigurationManager
                 .ConnectionStrings["MyConn"].ConnectionString;

Или, если вы используете язык, отличный от .NET, вы можете вместо этого использовать параметры приложения, которые во время выполнения становятся простыми переменными среды, к которым могут обращаться ваши функции.

34
David Ebbo

Jan_V почти прибил его, что привело меня к эксперименту с этим в local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true;",
    "AzureWebJobsDashboard": ""
  },
  "ConnectionStrings": {
    "MyConnectionString": "[YourConnectionStringHere]"
  }
}

Это позволяет вам использовать ConfigurationManager.ConnectionStrings[], к которому мы все привыкли.

var sqlConnection = ConfigurationManager
                   .ConnectionStrings["MyConnectionString"].ConnectionString;
32
Todd DeLand

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

  1. самое главное, что мы понимаем файл local.settings.json НЕ ДЛЯ Azure. оно должно запускать ваше приложение на локальном компьютере, поскольку имя ясно говорит. Таким образом, решение не имеет ничего общего с этим файлом.

  2. App.Config или Web.Config не работают со строками подключения функций Azure. Если у вас есть библиотека уровня базы данных, вы не можете перезаписать строку подключения, используя любую из них, как в приложениях Asp.Net.

  3. Чтобы работать с ним, вам нужно определить строку подключения на портале Azure в Application Settings в вашей функции Azure. Есть Строки подключения. там вы должны скопировать строку подключения вашего DBContext. если это edmx, это будет выглядеть так, как показано ниже. Существует тип подключения, я использую его SQlAzure, но я тестировал с Custom (кто-то утверждал, что работает только с Custom) работает с обоими. 

metadata = res: // /Models.myDB.csdl|res:// / Models.myDB.ssdl | res: //*/Models.myDB.msl; provider = System.Data.SqlClient; поставщик Строка подключения = 'источник данных = [yourdbURL]; исходный catalog = myDB; постоянная информация о безопасности = True; пользователь ID = хххх, пароль = ххх, MultipleActiveResultSets = True; App = EntityFramework

  1. После того, как вы это настроите, вам нужно прочитать URL в вашем приложении и предоставить DBContext. DbContext реализует конструктор с параметром строки подключения. По умолчанию конструктор не имеет параметров, но вы можете расширить его. если вы используете классы POCO, вы можете просто изменить класс DbContext. Если вы используете сгенерированные базой данных классы Edmx, как я, вы не хотите трогать автоматически сгенерированные классы edmx, вместо этого вы хотите создать частичный класс в том же пространстве имен и расширить этот класс, как показано ниже.

Это автоматически сгенерированный DbContext

namespace myApp.Data.Models
{   

    public partial class myDBEntities : DbContext
    {
        public myDBEntities()
           : base("name=myDBEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

}

это новый частичный класс, вы создаете

namespace myApp.Data.Models
{
    [DbConfigurationType(typeof(myDBContextConfig))]
    partial class myDBEntities
    {

        public myDBEntities(string connectionString) : base(connectionString)
        {
        }
    }

      public  class myDBContextConfig : DbConfiguration
        {
            public myDBContextConfig()
            {
                SetProviderServices("System.Data.EntityClient", 
                SqlProviderServices.Instance);
                SetDefaultConnectionFactory(new SqlConnectionFactory());
            }
        }
    }
  1. В конце концов, вы можете получить строку подключения в настройках Azure в своем проекте функции Azure с приведенным ниже кодом и указать свой DbContext MyDBEntities - это имя, которое вы указали на портале Azure для своей строки подключения.
var connString = ConfigurationManager.ConnectionStrings["myDBEntities"].ConnectionString;


 using (var dbContext = new myDBEntities(connString))
{
        //TODO:
}
12
batmaci

Configuration Manager будет заменен новой базовой системой конфигурации Asp.Net в функциях Runtime v2. 

Поэтому, если вы используете .Net Core, вы должны следовать статье блога Джона Галлантса: https://blog.jongallant.com/2018/01/Azure-function-config/

  • Работает с local.settings.json и настройками в функции Azure
  • Работает с настройками приложения и строками подключения
9
Johannes

Ответ Тодда Де Лэнда работает только для местной среды. Однако для этого doc , опубликованной функции Azure необходимо, чтобы строки подключения были сохранены в качестве параметров приложения и были получены с помощью GetEnvironmentVariable.

Добавление System.Configuration Ссылка на сборку ненужно.

string cs = Environment.GetEnvironmentVariable("MyConnectionString",EnvironmentVariableTarget.Process);

Вот шаги, чтобы сделать строки среды доступными для и локальной и опубликованной среды

  1. Для поддержки локальной среды в local.settings.json укажите строки подключения внутри узла Values

 local.settings.json picture

  1. Для поддержки опубликованной среды перейдите на portal.Azure.com > your Azure Function > function node > Application Settings

 Application Settings

 Add MyConnectionString

  1. Наконец, вызовите GetEnvironmentVariable из вашей функции Azure (не могу получить stackoverflow для правильного отображения этого кода)

 enter image description here

Это оно.

5
Jeson Martajaya

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

(Функция Настройки приложения -> Настройка параметров приложения -> Раздел настроек приложения)

Может быть, будет более полезным, если вы также можете сообщить нам, какой язык вы используете?

2
William Yeung

System.Configuration.ConfigurationManager больше не работает с AzureFunctions . Вместо этого следует использовать ExecutionContext из Azure.WebJobs и импортировать контекст с параметрами из Azure в качестве параметра в методе Run.

Взгляните на это объяснение: https://blog.jongallant.com/2018/01/Azure-function-config/

0
Wille Esteche