Ale*_*yov 9 c# asp.net asp.net-mvc hangfire
我有一个ASP.NET MVC应用程序作为Hangfire客户端 - 它排队不同的工作.我正在使用SqlServerJobStorage
Hangfire.
目前我正在处理一个与Hangfire数据库没有连接的情况,并且未来连接的某个地方正在实例化.
目标是我的ASP.NET MVC应用程序应该在此之前继续工作.连接恢复后,它应该开始排队作业.
因此,应用程序将抛出异常Global.asax
:
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
Run Code Online (Sandbox Code Playgroud)
此外,所有工作队列也会抛出异常:
BackgroundJob.Enqueue<ISomeClass>(x => x.DoSomethingGreat(JobCancellationToken.Null));
Run Code Online (Sandbox Code Playgroud)
我把行Global.asax
放在try/catch块中,所以它不会抛出.当有人排队工作时,我想检查一下JobStorage.Current
,如果它没有初始化,我会尝试使用相同的代码再次启动它:
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
Run Code Online (Sandbox Code Playgroud)
有人知道这样做的方法吗?文档没有关于此的信息.
有点像Hangfire.GlobalConfiguration.JobStorage.IsInitialized
?
从Job enqueue捕获异常也是一种方式,但我不喜欢它,因为它抛出非特定的
InvalidOperationException:尚未初始化JobStorage.Current属性值.您必须在使用Hangfire客户端或服务器API之前进行设置.
非常感谢那些读过这个地方的人)
您可以使用Hangfire.JobStorage.Current
static属性本身来检查Hangfire存储配置:
//InvalidOperationException " JobStorage.Current property value has not been initialized"
var storage = JobStorage.Current;
GlobalConfiguration.Configuration.UsePostgreSqlStorage(vaildConnString);
//no exception
storage = JobStorage.Current;
Run Code Online (Sandbox Code Playgroud)
此外,您可以查询数据库以测试连接:
JobStorage.Current.GetConnection().GetRecurringJobs();
Run Code Online (Sandbox Code Playgroud)
考虑到例外,我认为投掷一个InvalidOperationException
而不是类似的东西SqlException
是正确的.Hangfire核心与特定数据库的详细信息隔离.
归档时间: |
|
查看次数: |
9349 次 |
最近记录: |