Hangfire完成后如何发出通知
How to give notification after Hangfire is done
您好,我在 MVC 5 中使用 hangfire
创建了一个后台作业。我发送了后台作业已启动的通知,但我不知道如何在后台作业完成时发送通知,因为我的 ActionResults 方法已返回。
控制器
public ActionResult RunMedia(int ID)
{
BackgroundJob.Enqueue<CrawlerSearchRequestModel>(x => x.StoreMedia(ID,"NaturalPerson"));
obj
{
success: true
};
return JSON(obj, JsonRequestBehavior.AllowGet)
}
Ajax调用和Javascript通知
$(document).ready(function () {
$(document).on("click", "#submitButton", function () {
debugger;
var userId = $(this).attr('userid')
$.ajax({
type: 'POST',
url: "../LemonCreditAuth/NaturalPerson/RunMedia",
data: {
ID: userId
},
success: function (data) {
swal("Adverse Media!", "Adverse Media has started. After a 20 seconds please check the media case for updates", "success");
},
error: function (data, error) {
swal("Adverse Media!", "Error ocurred while trying to run adverse media", "warning");
}
});
});
谢谢
正如其他人所说,您可以使用 signalR 或其他协议。为此,请使用 IApplyStateFilter 过滤器并实现接口的 OnStateApplied 方法。
public class YourAttribute : IApplyStateFilter{
public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
if (context.NewState.IsFinal && context.NewState.Name == "Succeeded")
//Send your message to client via signalR
}}
您好,我在 MVC 5 中使用 hangfire
创建了一个后台作业。我发送了后台作业已启动的通知,但我不知道如何在后台作业完成时发送通知,因为我的 ActionResults 方法已返回。
控制器
public ActionResult RunMedia(int ID)
{
BackgroundJob.Enqueue<CrawlerSearchRequestModel>(x => x.StoreMedia(ID,"NaturalPerson"));
obj
{
success: true
};
return JSON(obj, JsonRequestBehavior.AllowGet)
}
Ajax调用和Javascript通知
$(document).ready(function () {
$(document).on("click", "#submitButton", function () {
debugger;
var userId = $(this).attr('userid')
$.ajax({
type: 'POST',
url: "../LemonCreditAuth/NaturalPerson/RunMedia",
data: {
ID: userId
},
success: function (data) {
swal("Adverse Media!", "Adverse Media has started. After a 20 seconds please check the media case for updates", "success");
},
error: function (data, error) {
swal("Adverse Media!", "Error ocurred while trying to run adverse media", "warning");
}
});
});
谢谢
正如其他人所说,您可以使用 signalR 或其他协议。为此,请使用 IApplyStateFilter 过滤器并实现接口的 OnStateApplied 方法。
public class YourAttribute : IApplyStateFilter{
public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
if (context.NewState.IsFinal && context.NewState.Name == "Succeeded")
//Send your message to client via signalR
}}