我写了一个带有 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 { ... }
}