我们有以下情况。
我们决定在我们的一个Web App中使用webjob每30秒执行一些工作。
为此,我们使用从Main函数调用的以下代码:
static void Run(bool locally)
{
JobHostConfiguration config = new JobHostConfiguration();
if (locally)
{
config.Tracing.ConsoleLevel = TraceLevel.Verbose;
config.UseDevelopmentSettings();
}config.UseTimers();
JobHost host = new JobHost(config);
host.RunAndBlock();
}
我们在webjob中只有定时器触发的方法:
public static async Task TimerJob([TimerTrigger("00:00:30")] TimerInfo timer)
{....
IEnumerable<IInvitationProcessor> processors = _container.Resolve<IEnumerable<IInvitationProcessor>>();
....
}
其中_container - autofac容器
我们注意到两个奇怪的不同的东西(看起来它们是相互关联的):
1)如果我们使用门户网站停止webjob,则webjob被显示为已停止,但事实上它仍在继续工作 - 我们在门户网站上的日志中看到日志,并且还登录了我们的webjob代码写入的AppInsights。重新启动WebApp没有帮助。唯一的
停止它的方法是删除webjob(事实上它继续工作),然后重新启动WebApp。只有在那之后,webjob才会停止(事实上它已经消失了)。
P.S。:我们的webjob使用TimerTrigger,而TimerTrigger又使用分布式锁来保证只会调用一个wbjob实例(每30秒)。因此,本地启动的实例仅在执行了上述操作(删除和重启)后才设法获取锁。 - 只是另一个证据 &#34;删除\停止&#34; webjob一直在运行。
2)经过一段时间(可能在重新部署之后),我们的webjob开始引发以下异常
在Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate处理System.IO.FileNotFoundException
尝试解决依赖关系时(看起来非常奇怪,因为大多数时候所有的dependecies都已成功解析 - 部署在azure Web App或本地)
感谢