Azure Функция v2 и строки подключения - PullRequest
0 голосов
/ 21 марта 2020

У меня есть следующий local.settings.json файл:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",

    "SureMdmApiKey": "xxx",
    "SureMdmApiUrl": "xxx",
    "SureMdmUsername": "xxx",
    "SureMdmPassword": "xxx"
  },
  "ConnectionStrings": {
    "StorageConnectionString": "aaaa",
    "DataContext": "aaaa"
  }
}

, тогда у меня есть следующий код в файле Startup.cs:

[assembly: FunctionsStartup(typeof(FunctionAppSureMdmSync.Startup))]
namespace FunctionAppSureMdmSync
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var services = builder.Services;

            services.AddTransient<ISureMdmService>(s => new SureMdmService(
                url: System.Environment.GetEnvironmentVariable("SureMdmApiUrl"),
                username: System.Environment.GetEnvironmentVariable("SureMdmUserName"),
                password: System.Environment.GetEnvironmentVariable("SureMdmPassword"),
                apiKey: System.Environment.GetEnvironmentVariable("SureMdmApiKey")
                ));

            var connString = System.Environment.GetEnvironmentVariable("ConnectionStrings:DataContext");
            services.AddDbContext<DataContext>(options => options
                .UseSqlServer(connString, x => x.UseNetTopologySuite()));


            services.AddTransient<ITabletGroupService, TabletGroupService>();
            services.AddTransient<ITabletService, TabletService>();
        }

    }
}

, и он отлично работает на локальном

Но когда я публикую sh эту функцию на Azure Portal и go на «Конфигурации» и добавьте «DataContext» в «Строки подключения»:

enter image description here

Мой код не работает:

            var connString = System.Environment.GetEnvironmentVariable("ConnectionStrings:DataContext");

Как получить строку подключения? Я хочу, чтобы он работал как на локальном, так и на портале Azure?

Ответы [ 3 ]

2 голосов
/ 21 марта 2020

Я обнаружил, что для доступа к IConfiguration в Startup вам нужно создать временного поставщика услуг, которого вы просто выбросите. В последнее время могут быть более эффективные способы, но они по-прежнему работают нормально:

var configuration = builder.Services.BuildServiceProvider().GetService<IConfiguration>(); 

Тогда не используйте System.Environment.GetEnvironmentVariable(), а IConfiguration (то же самое относится ко всей вашей конфигурации):

var connString = configuration.GetConnectionString("DataContext");
0 голосов
/ 21 марта 2020

Способ подключения к серверу SQL в моих функциях azure выглядит следующим образом:

var config = new ConfigurationBuilder()
           .SetBasePath(context.FunctionAppDirectory)
           .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
           .AddEnvironmentVariables()
           .Build();

var str = config.GetConnectionString("DataContext");

В параметрах функции:

public static void Run( blablabla,
            ExecutionContext context
            )
0 голосов
/ 21 марта 2020

Вам необходимо добавить переменную в конфигурации как ConnectionStrings:DataContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...