我正在 Azure 上试验两种基于 .NET Framework 的机制,它们可以由计时器触发:Azure Function v1 和 WebJob。AF 部署在函数应用上,WebJob 部署在 Api 应用上。两者都有免费计划集。
我希望通过有一个CRON计划(使用:“0*/10 * * * *" 每10分钟测试一次)来重复运行一些测试代码(控制台中的一行)将是一项简单的任务。似乎不是这样。
注意:在开始实验之前,我已经从测试队列触发的Web作业中知道,连续的Web作业应该设置为“始终打开”,以防止在一个小时左右后睡觉。但这在免费和共享计划中无法启用。但是,在队列触发的Web作业中,我通过向应用程序发送经过身份验证的请求来创建一个解决方法,以便在每次向队列中添加新消息时将其唤醒,这样我就可以确保Web作业在有一些工作要做时没有睡眠,即要处理队列消息。
但是,我认为计时器触发的Web作业不应该是“连续的”,而应该是“触发的”。但是当我将其部署为“触发的”时,我会得到这个错误:
(内部异常#0)ExitCode:-1,输出:由于121秒内没有输出或CPU活动,命令“cmd/c”“HeartbeatW…”被中止。如果需要,您可以增加SCM_COMMAND_IDLE_TIMEOUT应用程序设置(如果是WebJob,则增加WEBJOBS_IDLE_TIMOUT)。
我不知道增加超时会有什么帮助,也不知道应该设置为哪个值,但我的主代码可能有问题:
static void Main()
{
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddTimers();
});
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
});
var host = builder.Build();
using (host)
{
host.Run();
}
}
将WebJob部署为“连续”而不是“触发”可以防止此错误,但仍有两个问题:
进一步到Azure Function,情况会变得更糟。如果我部署我的Function,请等待一段时间并转到Function
我已经读到 Azure 函数和 WebJob 在后台的同一计划程序上运行。这是 Azure 函数此行为的原因吗?
所有这些都是设计的,不能改变吗?还是应该在部署过程中进行一些调整?
您的案例在门户中不正常。由于我不确定您的项目,让我们再次逐步完成工作。
NET Framework 4.7.2上的WebJob sdk。
将代码粘贴到Program.cs.为Azure Web作业Sdk添加Azure存储连接。
static async Task Main()
{
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
b.AddTimers();
});
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
});
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
在项目中添加功能:右键单击项目-
public static void ProcessTimerTrigger([TimerTrigger("0 * * * * *")] TimerInfo myTimer, ILogger logger)
{
logger.LogInformation("Message from Class1.");
}
安装所需的包。以下是我使用的一些 Web 作业包和版本:
<package id="Microsoft.Azure.WebJobs" version="3.0.23" targetFramework="net472" />
<package id="Microsoft.Azure.WebJobs.Extensions" version="4.0.1" targetFramework="net472" />
<package id="Microsoft.Azure.WebJobs.Extensions.Storage" version="4.0.3" targetFramework="net472" />
<package id="Microsoft.Azure.WebJobs.Host.Storage" version="4.0.1" targetFramework="net472" />
<package id="Microsoft.Extensions.Hosting" version="5.0.0" targetFramework="net472" />
<package id="Microsoft.Extensions.Logging" version="5.0.0" targetFramework="net472" />
<package id="Microsoft.Extensions.Logging.Console" version="5.0.0" targetFramework="net472" />
配置appsettings。Azure存储连接的json。
{
"ConnectionStrings": {
"AzureWebJobsStorage": "YourStorageConnectionString;"
}
}
顺便说一句,当将控制台应用程序发布为WebWork时,请选择连续运行。
参考:开始使用Azure WebJobs SDK进行定时器触发后台处理
我正在使用Python 3.x编写一个Azure timer触发器。我已经运行了一个这样的函数。我想我知道怎么做,从JS创建一个然后删除' index.js '并创建一个run.py,但这次,当我运行我的python函数时,我总是得到一个错误,说“没有这样的文件:index.js”。我没有看到函数和“index.js”文件之间有任何联系。 有什么想法吗?
我已经审阅了Microsoft提供的关于触发器的文档。[https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=python][1] 事实上,在Azure函数中使用参数允许我们检索blob和一些属性(),我们还可以使用函数读取字节,但是我们如何将字节转换为
当我的函数方法签名如下时,我有一个成功触发的v3 WebJob: 然而,当我添加一个输出blob时,BlobTrigger永远不会触发。 下面的文档如下:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#output
我在Visual Studio中创建了一个简单的blob触发器,init.py如下 function.json如下 local.settings。json如下所示 此代码在本地计算机上的visual studio中运行良好。但在azure portal上发布时,它无法从函数中读取blob路径。json并给出错误为 我已经使用命令发布了local.settings.json的contains。 .有
我有一个 Python Azure Functions 计时器触发器,每天运行一次,并将文件从通用 v2 热存储容器存档到通用 v2 冷存储容器。我正在使用Linux消费计划。代码如下所示: 在过去的几个月里,这种方法一直正常工作,没有出现任何问题,但是在过去的两天里,我在存档过程的中途看到了这个错误:< br> 除此之外,没有其他有意义的错误消息。如果我通过UI手动调用该函数,它将成功地归档其余
我已经创建了一个Azure webwork,它将向服务总线队列发送强类型消息,并成功发送。 我想创建另一个webjob,只要servicebus队列中有消息,就会触发该webjob。请在下面找到我正在尝试的代码。出于某种原因,尽管servicebus队列中有消息,但当我在本地运行webjob时,webjob未被触发并出现错误。 错误: 代码: 有谁能帮我解决这个问题吗? 谢谢