Веб-задания Azure JobHostConfiguration отсутствуют и не могут понять, как выполнить настройки сейчас - PullRequest
0 голосов
/ 02 мая 2019

Я хочу переписать мою текущую конфигурацию webjobs в версию 3.0, но не могу заставить ее работать с документацией, потому что я не знаю, как установить dashboardconnectionstring или storageconnectionstring без файла конфигурации.

JobHostConfiguration config = new JobHostConfiguration
{
    NameResolver = new WebJobsNameResolver()
};

string defaultStorageConnectionString = string.Format( "Some dynamically generation string" );
config.DashboardConnectionString = defaultStorageConnectionString;
config.StorageConnectionString = defaultStorageConnectionString;

using(JobHost host = new JobHost(config))
{
    // The following code ensures that the WebJob will be running continuously
    host.RunAndBlock();
}

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

1 Ответ

1 голос
/ 03 мая 2019

Обновление пакета 3.0.0 NuGet (не бета-версия) принесло серьезные изменения. Он основан на общем хосте, который похож на хост asp.net. Вы можете сослаться на шаги, как показано ниже:

1.Добавьте эту строку кода в вашу программу .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();
            }
        }
    }
}

2.Set appsettings.json (обратите внимание, что установить его свойство Copy to Output Directory или Copy always):

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

3.Functions.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);
        }
    }
}

4. Выход: enter image description here

Для более подробной информации, вы можете обратиться к этому учебнику .

Обновление

Как сказал Джои, мы могли бы использовать

config.AddInMemoryCollection(settings);

с

public static Dictionary<string, string> settings = new Dictionary<string, string>
{
    {"ConnectionStrings:AzureWebJobsDashboard:0", "xxxxxxx"},
    {"ConnectionStrings:AzureWebJobsStorage:1", "xxxxxx"},
};

Так что он не будет использовать файл конфигурации. Вот статья о том, как использовать AddInMemoryCollection

...