标签: azure-webjobs

每几分钟运行一次的 Azure WebJob

我正在尝试在 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-webjobs azure-webjobssdk

5
推荐指数
1
解决办法
8597
查看次数

Azure 文件存储活动是否可以触发 Azure WebJob 或 Azure Function?

Azure 文件存储活动可以触发 Azure WebJob 或 Azure Function 吗?

例如,在文件夹“/todo/”中创建文件时。

azure azure-webjobs azure-files azure-functions

5
推荐指数
1
解决办法
4389
查看次数

Azure Web 作业中的信号量

我想知道信号量(锁)是否可以在 Azure 函数中工作。我不希望两个单独的网络作业同时运行。网络工作采用相同的应用程序服务计划。

这是我可以用信号量保证的吗?(因为这可以实现跨进程锁定?)

azure azure-webjobs azure-functions

5
推荐指数
1
解决办法
2239
查看次数

本机代码中的高 CPU 使用率

我有一个在队列触发器上运行的 .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 参考都使用最新版本。

任何想法如何诊断这个?

profiling cpu-usage azure-webjobs

5
推荐指数
0
解决办法
252
查看次数

通过 Webhook url 触发 Azure Web 作业

我在使用 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 azure-webjobs

5
推荐指数
1
解决办法
4500
查看次数

Azure webjobs 不会使用 Azure 应用程序设置覆盖 appsettings.json

我有一个 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. …

c# azure-webjobs

5
推荐指数
1
解决办法
1269
查看次数

为什么 Azure Function 应用程序中使用的 Microsoft.Azure.WebJobs.HttpTriggerAttribute 是参数属性而不是方法属性?

我有一个 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 这样的方法属性?

c# azure azure-webjobs .net-core

5
推荐指数
1
解决办法
2195
查看次数

WebJob QueueTrigger TimeoutException:操作“GetMessages”未在“00:02:00”中完成

我的问题 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)

.net azure azure-webjobs

5
推荐指数
1
解决办法
596
查看次数

Visual Studio 2019 - 在 WebApp 中添加 WebJob 项目

在我的解决方案中,我有一个 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

5
推荐指数
1
解决办法
3013
查看次数

Azure WebJobs SDK是否专门用于Azure存储?

所有的文档(例如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?如果是这样,该文件在哪里?

.net azure visual-studio azure-webjobs azure-webjobssdk

4
推荐指数
1
解决办法
1085
查看次数