我正在尝试在 Azure 中设置计划的 WebJob。我能够部署我的网络作业。我可以通过门户明确运行网络作业。但是,我似乎无法让它按定期计划运行。
我希望该作业每 5 分钟运行一次。我意识到这不是免费的,我已更改为付费套餐并调整了最大重复阈值设置。有一次我因为设置而收到错误。
当我部署时,WebJob 显示为“按需”,并且它不会重复运行。我究竟做错了什么?
这是我所拥有的:
webjob-发布-settings.json
{
"$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
"webJobName": "Shopping-Logs-WebJob",
"startTime": "2016-01-07T00:00:00-08:00",
"endTime": null,
"jobRecurrenceFrequency": "Minute",
"interval": 5,
"runMode": "Scheduled"
}
Run Code Online (Sandbox Code Playgroud)
程序.cs
public class Program
{
static void Main()
{
var host = new JobHost();
host.Call(typeof(Functions).GetMethod("ManualTrigger"));
}
}
Run Code Online (Sandbox Code Playgroud)
函数.cs
public class Functions
{
[NoAutomaticTrigger]
public static void ManualTrigger(TextWriter log)
{
string storageAccountName = CloudConfigurationManager.GetSetting("AzureStorageAccountName");
string storageKey = CloudConfigurationManager.GetSetting("AzureStorageAccessKey");
SendMessage("String Fetched", (storageAccountName ?? String.Empty) + ":" + (storageKey ?? String.Empty));
if (String.IsNullOrWhiteSpace(storageAccountName) || String.IsNullOrWhiteSpace(storageKey))
{ …Run Code Online (Sandbox Code Playgroud) Azure 文件存储活动可以触发 Azure WebJob 或 Azure Function 吗?
例如,在文件夹“/todo/”中创建文件时。
我想知道信号量(锁)是否可以在 Azure 函数中工作。我不希望两个单独的网络作业同时运行。网络工作采用相同的应用程序服务计划。
这是我可以用信号量保证的吗?(因为这可以实现跨进程锁定?)
我有一个在队列触发器上运行的 .net C# Azure WebJob 项目,它执行并行后台处理,
我的 CPU 使用率过高。
我使用了 Resharper 的 Performance Profiler 和 CPU 消耗分解如下:
75% 的 CPU 时间在“没有解析函数的本机堆栈跟踪”中
不到 10% 的 CPU 时间在实际用户代码中。
我怎样才能找到高 CPU 消耗的真正原因?
Web 作业具有以下参数/设置:
QueueBatchSize = 8
NewBatchThreshold = 4
ServicePointManager.DefaultConnectionLimit = Int32.MaxValue
ThreadPool.SetMinThreads(250, 250)
Run Code Online (Sandbox Code Playgroud)
框架 4.7,所有 nuget 参考都使用最新版本。
任何想法如何诊断这个?
我在使用 Webhook url 触发 Azure webjobs 时遇到问题。
我创建了一个简单的“NoAutomaticTriggerAttribute”Azure web 作业,下面是代码
例如:
class Program
{
// Please set the following connection strings in app.config for this WebJob to run:
// AzureWebJobsDashboard and AzureWebJobsStorage
static void Main()
{
var test = ConfigurationManager.ConnectionStrings["AzureWebJobsDashboard"].ConnectionString.ToString();
var config = new JobHostConfiguration(test);
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
host.Call(typeof(Functions).GetMethod("ProcessMethod"));
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
Run Code Online (Sandbox Code Playgroud)
下面是函数类代码:
public class Functions
{
// This function will …Run Code Online (Sandbox Code Playgroud) 我有一个 Azure Web 作业 ( .NET Core 2.2),它在启动时从配置中读取一些设置,如下所示:
var builder = new HostBuilder()
.UseEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"))
.ConfigureWebJobs()
.ConfigureAppConfiguration((hostContext, configApp) =>
{
configApp.AddEnvironmentVariables();
configApp.AddJsonFile("appsettings.json", optional: false);
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole();
var instrumentationKey = hostingContext.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
if (!string.IsNullOrEmpty(instrumentationKey))
{
Console.Writeline(instrumentationKey); // <- this always outputs key from appsettings.json, not from Azure Settings
logging.AddApplicationInsights(instrumentationKey);
}
})
.UseConsoleLifetime();
Run Code Online (Sandbox Code Playgroud)
如你看到的, appsettings.json文件应该有一个APPINSIGHTS_INSTRUMENTATIONKEY密钥,并且在开发环境中读取它很好。
现在,对于生产,我想覆盖它 APPINSIGHTS_INSTRUMENTATIONKEY通过在 Azure 应用程序设置 Web 界面中添加具有相同密钥的设置密钥。
但是,当我将我的 webjob 部署到 Azure 时,它仍然具有来自appsettings.json. 为了强制我的 webjob 具有 Azure 应用程序设置中的覆盖密钥,我必须从appsettings.json. …
我有一个 Azure Functions 应用程序。
我很惊讶地发现,在定义 Azure WebJob 函数时,HttpTriggerAttribute 不必应用于 HttpRequest 参数。
因此,虽然这是有效的,并且与大多数教程和示例相匹配,
[FunctionName("get")]
public async Task<IActionResult> Get(
[HttpTrigger(AuthorizationLevel.Anonymous, nameof(HttpMethods.Get), Route = "api/get")]HttpRequest httpRequest)
Run Code Online (Sandbox Code Playgroud)
这也是有效的,
[FunctionName("post")]
public async Task<IActionResult> Post(
[HttpTrigger(AuthorizationLevel.Anonymous, nameof(HttpMethods.Post), Route = "api/post")]MyType body)
Run Code Online (Sandbox Code Playgroud)
由于该属性未绑定到 HttpRequest 参数,因此我很惊讶该属性是参数属性而不是方法属性,例如,
[FunctionName("post")]
[HttpTrigger(AuthorizationLevel.Anonymous, nameof(HttpMethods.Post), Route = "api/post")]
public async Task<IActionResult> Post(MyType body)
Run Code Online (Sandbox Code Playgroud)
为什么 HttpTriggerAttribute 被实现为参数属性而不是像 FunctionNameAttribute 这样的方法属性?
与我的问题 60304305有点相关......我的 Azure webJob 应用程序处理多个队列,但它们不会产生高流量。尽管如此,该应用程序仍会不时遇到超时异常,并且几乎不可能重现该错误,但是在 Queue 函数内的断点处中断并保持一段时间时,我取得了一些成功。
System.TimeoutException
HResult=0x********
Message=The operation 'GetMessages' with id '********-****-****-****-************' did not complete in '00:02:00'.
Source=Microsoft.Azure.WebJobs.Extensions.Storage
StackTrace:
at Microsoft.Azure.WebJobs.Extensions.Storage.TimeoutHandler.<ExecuteWithTimeout>d__1`1.MoveNext() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Extensions.Storage\TimeoutHandler.cs:line 30
at Microsoft.Azure.WebJobs.Host.Timers.WebJobsExceptionHandler.<>c__DisplayClass3_0.<OnUnhandledExceptionAsync>b__0() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Timers\WebJobsExceptionHandler.cs:line 54
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
This exception was originally thrown at this call stack:
Microsoft.Azure.WebJobs.Extensions.Storage.TimeoutHandler.ExecuteWithTimeout<T>(string, string, Microsoft.Azure.WebJobs.Host.Timers.IWebJobsExceptionHandler, System.Func<System.Threading.Tasks.Task<T>>) in TimeoutHandler.cs
Microsoft.Azure.WebJobs.Host.Timers.WebJobsExceptionHandler.OnUnhandledExceptionAsync.AnonymousMethod__0() …Run Code Online (Sandbox Code Playgroud) 在我的解决方案中,我有一个 aspnet core 2.2 WebApp,我想添加一个现有项目,例如 webJob,但没有选项:从现有项目添加 WebJobs
为什么?使用相同的过程,我在其他 .Net 应用程序上添加 WebJobs,该选项显示在 Visual Studio 2019 中
编辑
用英语更改图像。有时,“添加”>“现有项目”会显示为 Azure WebJobs,但如果我单击它,则会显示以下错误:
(选择的项目是aspnet.core 2.2.WebApp)
单击此按钮后,“添加”>“作为 Azure WebJobs 的现有项目”将不再可见。
c# azure-webjobs azure-webjobssdk asp.net-core visual-studio-2019
所有的文档(例如http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/)和样品项目为天青WebJobs SDK指钩和绑定Azure存储(表,博客和队列).我有兴趣将WebJobs用于与这些存储机制无关的功能,例如运行计算,调用服务或将它们与WebJobs SDK没有挂钩的其他存储服务一起使用.在这些情况下,使用WebJobs SDK有什么价值吗?我对(或许不正确)的印象是,sdk为管理自己的作业执行提供了许多其他好处,比如控制在单个线程中运行阻塞而在后台运行等等,也许与操作挂钩有关启动和停止作业,而一些挂钩到Visual Studio,等我知道我可以上传独立的EXE文件和脚本文件并运行它们作为WebJobs但我还假定,以这种方式运行更加不透明,给你少可视性工作执行以及控制它们的程序化能力较低.
是否有理由在Web表格,博客和队列存储服务的钩子之外使用WebJobs SDK?如果是这样,该文件在哪里?
azure-webjobs ×10
azure ×7
c# ×3
.net ×2
.net-core ×1
asp.net-core ×1
azure-files ×1
cpu-usage ×1
profiling ×1