如何解决Azure WebJob中无法获取单例锁的问题

本文关键字:获取 单例锁 问题 WebJob 何解决 解决 Azure | 更新日期: 2023-09-27 17:57:52

当我在本地运行应用程序时,我无法获得单例锁问题。我该如何解决?

下面是我的代码

static void Main()
    {
        JobHostConfiguration config = new`enter code here` JobHostConfiguration();
        config.UseTimers();
        AutoMapperManager.SetAutomapper();
        JobHost host = new JobHost(config);
        //Task.Factory.StartNew(() => host.Call(typeof(Functions).GetMethod("GetActionItemPullData")));
        config.Tracing.ConsoleLevel = TraceLevel.Verbose;
        host.RunAndBlock();
    }

谨致问候,Vantage

如何解决Azure WebJob中无法获取单例锁的问题

您可以将主机ID覆盖为默认值以外的值。此代码片段适用于WebJobs SDK的v3,但v2也有类似的设置。如果多个人在同一个项目上本地工作,这个解决方案甚至可以工作。

builder.ConfigureWebJobs(context =>
{
  if (IsLocal)
  {
    context.UseHostId(Environment.UserName);
  }
  // other context operations
}

我碰巧将web作业迁移到了一个新的应用程序服务,但也遇到了同样的错误。在查看了所有内容后,我发现它是什么:

请确保没有web作业的实例在Azure中运行。这意味着,停止Azure中的web作业。如果您的目标存储帐户相同,则即使是本地副本也不会运行。

停止应用程序服务不会停止web作业。您需要明确停止web作业

添加详细的日志记录级别对我帮助很大。

config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Verbose;

如果你已经将你的网络作业发布到Azure,请确保它在尝试本地运行时没有在那里运行。

This is the better approach I found, just sharing with you =).
    [Conditional("DEBUG")]
    private static void DebugWebService(IWebJobsBuilder builder)
    {
        builder.UseHostId(Guid.NewGuid().ToString("N"));
    }

按照Zach的建议进行了编辑和调整。