1

我写了一个带有 timerTrigger 的 azure webjob。静态方法每分钟调用一次,它必须发出 http POST 请求。我想在 timerTrigger 静态方法中访问 appSettings.json 文件。我怎样才能访问它?

我看到了 QueueTrigger 的静态方法将 ExecutionContext 和 TextWriter 作为参数的示例。请看下面的例子:

    public static void ProcessOrder(
    [QueueTrigger("orders")] Order order,
    TextWriter log,
    ExecutionContext context)
{
    log.WriteLine("InvocationId: {0}", context.InvocationId);
}

如何将类似的当前执行上下文和 TextWriter 记录器注入我的 timerTrigger 静态方法 - “TimerTick”?下面是我的 TimerTrigger 静态方法:

        public class Test
        {
            private static IConfiguration _config;
            private static IHttpHandler _httpHandler;
            public Test(IConfiguration configuration, IHttpHandler httpHandler)
            {
                _config = configuration;
                _httpHandler = httpHandler;
            }

      [Singleton]
            public static void TimerTick([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer)
            {
                string baseUrl = _config?.GetSection("WebJobConfiguration:url")?.Value;
                string API = _config.GetSection("WebJobConfiguration:API")?.Value;
                Console.WriteLine("URL: " + baseUrl + API);
                _httpHandler.PostAsync(baseUrl + API, null);
            }
}

==================================================== ===================== 更新问题:

我将 TimerTrigger 的方法更新为:

public async static Task TriggerNotification([TimerTrigger("%Job%")]TimerInfo myTimer, ExecutionContext context)
    {....}

使用 NameResolver 从配置文件中读取 %Job%。

当我尝试在 TriggerNotification 方法中传递当前执行上下文时,我收到以下错误: 在此处输入图像描述

我该如何解决这个问题?

Webjob 是使用 HostBuilder 配置的。下面是代码。我正在使用 Azure 网络作业 3.0.3 版。

 static void Main(string[] args)
    {
        try
        {
            var builder = new HostBuilder()
                    .ConfigureAppConfiguration(SetupConfiguration)
                    .ConfigureLogging(SetupLogging)
                    .ConfigureServices(SetupServices)
                    .ConfigureWebJobs(webJobConfiguration =>
                    {
                        webJobConfiguration.AddTimers();
                        webJobConfiguration.AddAzureStorageCoreServices(); 
                    })
                    .UseSerilog()
                .Build();
            builder.Run();
        } catch { ... }

}

4

1 回答 1

3

我想在 timerTrigger 静态方法中访问 appSettings.json 文件。我怎样才能访问它?

我曾经Microsoft.Extensions.Configuration.Json实现它,在大多数情况下,我们使用这个包来配置 Json 中的设置。我试过它可以用来读取json。这是完整的代码。你可以试一试。

public static void Run([TimerTrigger("0 */1 * * * *")] TimerInfo timer,
        ILogger logger)
    {
        logger.LogInformation("Doing some timely work ...");
        IConfigurationRoot configurationRoot = BuildConfiguration();
        string connectString= configurationRoot.GetSection("ConnectionStrings")["AzureWebJobsDashboard"];
        logger.LogInformation(connectString);


        // and other stuff .....
    }

    private static IConfigurationRoot BuildConfiguration()
    {
        var builder = new ConfigurationBuilder()
             .SetBasePath(Directory.GetCurrentDirectory())
             .AddJsonFile("appsettings.json");

        IConfigurationRoot configurationRoot = builder.Build();
        return configurationRoot;
    }

您可以在 Logger 中显示它。 在此处输入图像描述

至于ExecutionContext,你可以参考这个wiki,或者你可以去官方文档,它有关于如何使用它的例子。

希望这可以帮助您,如果您还有其他问题,请告诉我。

更新:Program.cs 图片。

在此处输入图像描述

于 2019-01-16T09:32:37.183 回答