Azure WebJobs (3.x) Непрерывное задание не отображает функции на панели инструментов - PullRequest
0 голосов
/ 17 октября 2018

У нас есть Azure WebJob (3.x), работающая под приложением API в Azure, все Core 2.1.Он публикует нормально и работает, но не отображает никаких функций и не отображает вызовы функций на панели инструментов.Что странно, потому что вывод консоли для задания показывает, что он обнаруживает функцию:

[10/17/2018 09:26:19 > fa7c81: SYS INFO] Run script 'run.cmd' with script host - 'WindowsScriptHost'
[10/17/2018 09:26:19 > fa7c81: SYS INFO] Status changed to Running
[10/17/2018 09:26:19 > fa7c81: INFO] 
[10/17/2018 09:26:19 > fa7c81: INFO] D:\local\Temp\jobs\continuous\SubmissionJob\43ucb4rv.ipc>dotnet SubmissionJob.dll  
[10/17/2018 09:26:21 > fa7c81: INFO] dbug: Microsoft.Extensions.Hosting.Internal.Host[1]
[10/17/2018 09:26:21 > fa7c81: INFO]       Hosting starting
[10/17/2018 09:26:21 > fa7c81: INFO] info: Microsoft.Azure.WebJobs.Hosting.JobHostService[0]
[10/17/2018 09:26:21 > fa7c81: INFO]       Starting JobHost
[10/17/2018 09:26:21 > fa7c81: INFO] info: Host.Startup[0]
[10/17/2018 09:26:21 > fa7c81: INFO]       Found the following functions:
[10/17/2018 09:26:21 > fa7c81: INFO]       SubmissionJob.Functions.ProcessQueueMessageAsync
[10/17/2018 09:26:21 > fa7c81: INFO]       
[10/17/2018 09:26:21 > fa7c81: INFO] Application started. Press Ctrl+C to shut down.
[10/17/2018 09:26:21 > fa7c81: INFO] Hosting environment: QA

Класс Program.cs Program выглядит следующим образом:

public static async Task Main(string[] args)
    {
        var builder = new HostBuilder()
            .UseEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"))
            .ConfigureWebJobs(b =>
            {
                b.AddAzureStorageCoreServices()
                    .AddAzureStorage()
                    .AddServiceBus()
                    .AddEventHubs();
            })
            .ConfigureAppConfiguration(b =>
            {
                // Adding command line as a configuration source
                b.AddCommandLine(args);
            })
            .ConfigureLogging((context, b) =>
            {
                b.SetMinimumLevel(LogLevel.Debug);
                b.AddConsole();

                // If this key exists in any config, use it to enable App Insights
                var appInsightsKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
                if (!string.IsNullOrEmpty(appInsightsKey))
                {
                    b.AddApplicationInsights(o => o.InstrumentationKey = appInsightsKey);
                }
            })
            .ConfigureServices((context, services) =>
            {
                services.AddAutoMapper();

                services.AddMemoryCache();

                services.AddDbContext<SubmissionsDbContext>(opts =>
                    opts.UseSqlServer(context.Configuration.GetConnectionString("DefaultConnection")));

                // cloud services
                services.AddTransient(s =>
                    CloudStorageAccount.Parse(
                        context.Configuration.GetConnectionString("AzureQueueConnectionString")));
                services.AddTransient<IBlobReadService, AzureBlobReadService>();
                services.AddSingleton<IBlobWriteService, AzureBlobWriteService>();
                services.AddSingleton<IQueueWriteService, AzureQueueWriteService>();

                // submission services
                services.AddScoped<ISubmissionStatusService, SubmissionStatusService>();

                services.AddSingleton<Functions, Functions>();

                // job activator, required in webjobs sdk 3+
                services.AddSingleton<IJobActivator>(new WebJobsActivator(services.BuildServiceProvider()));
            })
            .UseConsoleLifetime();;

        var host = builder.Build();
        using (host)
        {
            await host.RunAsync();
        }
    }

Функции.cs имеет метод со следующей подписью:

public async Task ProcessQueueMessageAsync([QueueTrigger("operations")] CloudQueueMessage incomingMessage, TextWriter log)

... scm.azurewebsites.net/azurejobs/#/jobs/continuous/SubmissionJob показывает

Continuous WebJob Details SubmissionJob
Running
Run command: run.cmd

Но нетсписок вызовов функций под ним, и задание остается постоянно в состоянии Running.Если я перейду к ссылке «Функции» в Kudu, то там будет сказано, что нет вызовов функций / функций для отображения.

Есть мысли?

Большая часть этого работала нормально в Framework 4.7, хотяконструктор приложений был явно другим.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Ответ на этот вопрос двоякий.

Вы можете написать на приборную панель Kudu с помощью

var builder = new HostBuilder()
    .ConfigureWebJobs(b =>
    {
        b.AddDashboardLogging();
    });

Это будет работать и отображать вызовы функций для WebJobs 1.x, 2.x.Тем не менее, начиная с версии WebJobs SDK 3.x, это устарело .Выходные данные консоли будут отображаться в инструментальной панели Kudu, но функции не будут обнаружены и не будут отображаться, равно как и их вызовы.Вместо этого рекомендуется использовать Application Insights.

var builder = new HostBuilder()
    .ConfigureLogging((context, b) =>
    {
        b.SetMinimumLevel(LogLevel.Debug);
        b.AddConsole();

        // If this key exists in any config, use it to enable App Insights.
        // This may already be configured in Azure Portal if running WebJob udner existing app with App Insights.
        var appInsightsKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
        if (!string.IsNullOrEmpty(appInsightsKey))
        {
            b.AddApplicationInsights(o => o.InstrumentationKey = appInsightsKey);
        }
    });

Убедитесь, что вы настроили строку подключения с именем AzureWebJobsStorage и строку подключения к хранилищу.

См. Также: https://github.com/Azure/azure-webjobs-sdk/wiki/Application-Insights-Integration

А: https://docs.microsoft.com/en-us/azure/app-service/webjobs-sdk-get-started#add-application-insights-logging

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

Если вы пропустили приведенный ниже код

Функции - это имя класса функций.

 .ConfigureServices((hostBuilderContext, services) =>
                 {
                     services.AddScoped<Functions, Functions>();
                 })

Я думаю, что это должно работать.

0 голосов
/ 17 октября 2018

Ведение журнала панели мониторинга по умолчанию не включено.

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

...