Как читать значения конфигурации из файла settings.json в функции Azure на основе ядра dotnet в атрибуте триггера

У меня есть проект функции Azure v2 (.NET Core), в котором я создал функцию типа триггера Queue.

Атрибут триггера очереди выглядит так:

public static void Run(
          [QueueTrigger("myqueue-name",
          Connection = "Someconnectionstring")]string myQueueItem,
       ILogger log)

В приведенном выше фрагменте кода я хочу получить значение myqueue-name из файла local.settings.json при локальном запуске, а затем добавить такое же значение конфигурации в настройки приложения и получить это значение при работе в лазурном.

Я искал и нашел решение: Значения из local.settings.json в Azure Функции

Он предлагает ссылаться на ключ конфигурации между %% - это отлично работает, если я использую функцию Azure v1 (.NET Framework), но, к сожалению, не работает, когда я использую версию функции Azure v2 .NET Core. Нужна помощь с использованием настраиваемых значений в атрибуте [QueueTrigger] из файла settings.json или настроек приложения в лазурном.


person Jsinh    schedule 22.12.2018    source источник
comment
Решение должно работать и для версии 2, не могли бы вы показать нам информацию об ошибке или что-нибудь подозрительное, что вы встретите, например вывод консоли при локальной отладке?   -  person Jerry Liu    schedule 22.12.2018
comment
Похоже, проблема была в другом, я снова проверил, и, похоже, все работает нормально. Единственная разница между двумя образцами, которые я пробовал, - раньше (когда он не работал) - я использовал триггер CosmoDB, а теперь (который работает) я использую QueueTrigger - я постараюсь больше копать и размещать дополнительные сведения @JerryLiu   -  person Jsinh    schedule 27.12.2018
comment
Подтверждено, я не могу воспроизвести ту же проблему. У меня было так много всего, поэтому я не уверен, в чем была проблема, когда я писал, но теперь все работает нормально. Спасибо за помощь @JerryLiu   -  person Jsinh    schedule 29.12.2018


Ответы (1)


Вы также можете напрямую получить доступ к самому объявлению атрибута. В настройках приложения у меня есть serviceBusConnectionString, и я также использую триггер очереди в своем коде

   public static async void Run([ServiceBusTrigger("orders", Connection = "serviceBusConnectionString")] Message myMessage, ILogger log)
   {
     //DoSomething
   }

введите здесь описание изображения

РЕДАКТИРОВАТЬ 2: Итак, если вы хотите, чтобы имя очереди также извлекалось из appSettings, просто создайте INameResolver, чтобы разрешить любую строку, окруженную знаками% (процентов).

 public static async void Run([ServiceBusTrigger("%orders%", Connection = "serviceBusConnectionString")] Message myMessage, ILogger log)
       {
         //DoSomething
       }

и напишите метод резолвера, подобный этому

public class QueueNameResolver : INameResolver
{
    public string Resolve(string name)
    {
        return ConfigurationManager.AppSettings[name].ToString();
    }
}

А затем в вашем файле Program.cs добавьте следующий блок

var host = new JobHost(new JobHostConfiguration
{
  NameResolver = new QueueNameResolver()
});
host.RunAndBlock();
person HariHaran    schedule 26.12.2018
comment
Предоставленное вами решение не помогает с вопросом, который я задал - пожалуйста, прочтите внимательно. Я хочу читать настраиваемые значения из объявления атрибута, а не внутри метода - person Jsinh; 27.12.2018
comment
Спасибо, но все еще не тот ответ, который я ищу - мне нужно установить порядок значений в настройках приложений Azure. - person Jsinh; 27.12.2018
comment
Ваше решение, упомянутое в редактировании 2 об использовании %%, работает без INameResolver, как упоминалось Джерри - person Jsinh; 28.12.2018
comment
@Jsinh надеюсь, что это поможет - person HariHaran; 31.12.2018