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

bq9c1y66  于 2023-01-21  发布在  其他
关注(0)|答案(4)|浏览(133)

当我在本地运行应用程序时,我无法获得单例锁问题。我该如何解决这个问题?
下面是我的代码

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

0kjbasz6

0kjbasz61#

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

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

  // other context operations
}
3bygqnnd

3bygqnnd2#

我碰巧把网络作业迁移到了一个新的应用程序服务上,也得到了同样的错误。在查看了所有内容后,我明白了是什么:
确保Azure中没有运行Web作业的示例。这意味着,停止Azure中的Web作业。如果你的目标是同一存储帐户,则即使本地副本也不会运行。

停止应用程序服务不会停止Web作业。你需要显式停止Web作业。

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

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

2uluyalo3#

如果您已将Web作业发布到Azure,请确保在尝试本地运行它时,它未在Azure中运行。

zzoitvuj

zzoitvuj4#

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"));
    }

按照扎克的建议编辑调整。

相关问题