如何解决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
您可以将主机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的建议进行了编辑和调整。