我写了一个带有timerTrigger的天蓝色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方法中传递当前执行上下文时,出现以下错误:
我该如何解决?
使用JobBuilder配置Web作业。下面是代码。我正在使用Azure Webjob版本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 { ... }
}
答案 0 :(得分:1)
我想访问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;
}
对于ExecutionContext
,您可以参考此wiki,也可以去官方doc,其中包含有关如何使用它的示例。
希望这对您有帮助,如果您还有其他问题,请告诉我。
更新:Program.cs图片。