Как указать AzureWebJobsStorage в последней веб-работе Azure 3.03 - PullRequest
0 голосов
/ 04 января 2019

Я обновил свой старый код Azure Webjob до пакета 3,03, и тогда он просто не работает.

Мне удалось исправить все ошибки времени компиляции, но при локальном запуске выдает эту ошибку:

Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException
  HResult=0x80131500
  Message=Error indexing method 'MvQueueProcessorV2.ProcessMVRequest'
  Source=Microsoft.Azure.WebJobs.Host
  StackTrace:
   at Microsoft.Azure.WebJobs.Host.RecoverableException.TryRecover(ILogger logger) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Exceptions\RecoverableException.cs:line 81
   at FE.Toolkit.MvPaaS.WebJob.Program.<Main>(String[] args)

Inner Exception 1:
InvalidOperationException: Storage account 'Storage' is not configured.

Для меня это означает, что он не может найти настройку AzureWebJobsStorage ? Тем не менее, он хорошо спит в файле app.config. Итак, я предположил, что мне нужно поместить строку подключения в appsettings.json, вот что я сделал в своем appsettings.json:

{
  "ConnectionStrings": {
    "AzureWebJobsDashboard": "xxx",
    "Storage": "yyy"
  }
}

Однако, это дает мне ту же ошибку. Так как мне установить хранилище для webjob 3.0?

Это мой код в программе.cs

var builder = new HostBuilder()
              .UseEnvironment("Development")
              .ConfigureWebJobs(b =>
               {
                 b.AddAzureStorageCoreServices()
                   .AddAzureStorage()
                   .AddTimers()
                   .AddFiles()
                   .AddDashboardLogging();
                   })
                  .ConfigureLogging((context, b) =>
                 {
                   b.SetMinimumLevel(LogLevel.Debug);
                   b.AddConsole();
                  })
                   .ConfigureServices(services =>
                  {
                        services.AddSingleton<INameResolver, ConfigNameResolver>();
                  })
               .UseConsoleLifetime();

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Я столкнулся с той же проблемой, и вот мое решение .

Ниже приведены сборки Azure, о которых я говорю

enter image description here

При вышеуказанной настройке нет необходимости вызывать c.AddJsonFile("appsettings.json", ... ), если имя файла конфигурации 'appSettings.json'

По умолчанию фреймворк будет искать файл с именем 'appsettings.json'

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

HostBuilder builder = new HostBuilder();

//Below piece of code is not required if name of json file is 'appsettings.json'
builder.ConfigureAppConfiguration(c =>
{
   c.AddJsonFile("Myappsettings.json", optional: false, reloadOnChange: true);

});

Простой и важный шаг , вызывающий проблему при отладке на моем локальном компьютере, был свойством Copy to Output Directory моего файла appsettings.json. @ Иван Ян уже упоминал об этом в своем ответе.

enter image description here

Здесь - ссылка на git hub исходного кода.

Примечание: я следовал этой документации для реализации базы кода.

0 голосов
/ 07 января 2019

Пожалуйста, добавьте эту строку кода в вашу программу.cs:

.ConfigureAppConfiguration((context, config) => {
                    config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
                })

Я проверил на моей стороне, и отлично работает.

код в Program.cs:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace WebJob1template
{
    class Program
    {
        static void Main()
        {

            var builder = new HostBuilder()
                .UseEnvironment("Development")
                .ConfigureAppConfiguration((context, config) => {
                    config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
                })
                .ConfigureWebJobs(
                b =>
                {
                    b.AddAzureStorageCoreServices()
                    .AddAzureStorage()
                    .AddTimers()
                    .AddFiles();
                    //.AddDashboardLogging();
                })
                .ConfigureLogging((context, b) =>
                {
                    b.SetMinimumLevel(LogLevel.Debug);
                    b.AddConsole();
                })
                .UseConsoleLifetime();


            var host = builder.Build();

            using (host)
            {
                host.Run();
            }
        }
    }
}

appsettings.json (обратите внимание, что для свойства «Копировать в выходной каталог» всегда устанавливается значение «Копировать»):

{
  "ConnectionStrings": {
    "AzureWebJobsDashboard": "xxxx",
    "AzureWebJobsStorage": "xxxx"
  }
}

Function.cs:

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

namespace WebJob1template
{
    public class Functions
    {        
        public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger log)
        {
            //log.WriteLine(message);
            log.LogInformation(message);
        }
    }
}

Результат теста:

enter image description here

...