我已经完成了30多次测试,能够成功完成一项工作(它只完成了Console.WriteLine("")
和(TextWriter)log.WriteLine("")
),但是自从尝试添加真实内容代码,我无法使其再次正常工作。
我已经删除了我添加的所有自定义代码,并将其恢复为仅执行日志记录语句,但是Azure从未完成初始作业运行。
这是整个输出,无论我坐了多长时间:
[08/16/2018 00:43:38> 0708fc:SYS INFO]状态已更改为Initializing
[08/16/2018 00:43:40> 0708fc:SYS INFO]使用脚本主机-'WindowsScriptHost'运行脚本'BatchJobEngineWebJob.exe'
[08/16/2018 00:43:40> 0708fc:SYS INFO]状态已更改为“运行”
[08/16/2018 00:43:43> 0708fc:INFO]找到了以下功能:
[08/16/2018 00:43:43> 0708fc:INFO] BatchJobEngineWebJob.Functions.DivisionI
[08/16/2018 00:43:45> 0708fc:INFO]作业托管已启动
阅读日志,您可以看到它正在识别我的定时功能(称为* .Functions.DivisionI),仅此而已。它说工作主持人开始了,就是这样。
这是我配置所有内容的program.cs代码:
static void Main()
{
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
var config = new JobHostConfiguration();
//config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(5);
//config.Queues.VisibilityTimeout = TimeSpan.FromMinutes(1);
//config.Queues.BatchSize = 1;
config.JobActivator = new BatchJobActivator(serviceCollection.BuildServiceProvider());
config.UseTimers();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
private static void ConfigureServices(IServiceCollection serviceCollection)
{
// Optional: Setup your configuration:
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
// add any interfaces that will be needed here
serviceCollection.AddTransient<IBatchJobService, BatchJobService>();
// ...stripped the rest of the interfaces
// executes the job
serviceCollection.AddTransient<ExecuteBatchJobs, ExecuteBatchJobs>();
// One more thing - tell azure where your azure connection strings are
var connStringDashboard = configuration["ConnectionStrings:AzureWebJobsDashboard"];
var connStringStorage = configuration["ConnectionStrings:AzureWebJobsStorage"];
Environment.SetEnvironmentVariable("AzureWebJobsDashboard", connStringDashboard);
Environment.SetEnvironmentVariable("AzureWebJobsStorage", connStringStorage);
}
这是我的Functions.cs类,其中包含需要执行的功能:
public class Functions
{
private readonly IBatchJobService _batchJobService;
//public Functions(IBatchJobService batchJobService)
//{
// _batchJobService = batchJobService;
//}
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
//public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)
//{
// log.WriteLine(message);
//}
//[FunctionName("HourlyBatchJobs_DivisionI")]
public async Task DivisionI([TimerTrigger("1 * * * * *", RunOnStartup = true)] TimerInfo timerInfo, TextWriter log)
{
await log.WriteLineAsync("bout time!");
Console.WriteLine("starting");
//log.WriteLine("executing HourleyBatchJobs_DivisionI");
//await _batchJobService.Execute();
}
}
我在这里的代码有什么问题可能会阻止其执行?
要注意的一件事:我已经在WebJobs列表中添加和删除了40多个工作,以使其正常工作。我发现Azure WebJobs有一个非常严重的错误。如果添加,运行和删除名为“ Test5”的作业。然后稍后再返回并添加具有相同名称的另一个作业,单击“运行”按钮将失败,表示该作业已在执行。我最终不得不将作业添加为Test5b才能运行。我想知道这是否有可能使所有这些连续的测试都失败了?
答案 0 :(得分:0)
尽管已经计划了,但实际上尚不存在用于.Net Core webjobs的VS 2017工具。仍然可以编写基于Core的WebJob并将其手动部署到Web App。但是请注意,WebJob SDK(这是另一个主题)尚不支持.NET Core。您可以参考此issue。
此外,您可以使用 .net core 2.0控制台应用程序来实现它。您可以参考以下步骤。
1。安装Microsoft.Azure.WebJobs.Extensions软件包。
2。在Program.cs
文件中添加以下代码。
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
config.UseTimers();
config.DashboardConnectionString ="storage connectionstring";
config.StorageConnectionString = "storage connectionstring";
var host = new JobHost(config);
host.RunAndBlock();
3。将Functions.cs
文件添加到项目中。
public class Functions
{
public static void CronJob([TimerTrigger("0 */5 * * * *")] TimerInfo timer)
{
Console.WriteLine("timer job fired!");
}
}