【问题标题】:Use session variables in to Hangfire Recurring Job在 Hangfire Recurring Job 中使用会话变量
【发布时间】:2018-04-17 19:00:06
【问题描述】:

我已将 hangfire 集成到 Asp.net Web 应用程序中,并尝试在 Hangfire Recurring Job 中使用会话变量,如下所示:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        HangfireSyncServices objSync = new HangfireSyncServices();

        var options = new DashboardOptions
        {
            Authorization = new[] { new CustomAuthorizationFilter() }
        };
        app.UseHangfireDashboard("/hangfire", options);

        app.UseHangfireServer();

        //Recurring Job
        RecurringJob.AddOrUpdate("ADDRESS_SYNC", () => objSync.ADDRESS_SYNC(), Cron.MinuteInterval(30));

    }
}

我的“HangfireSyncServices”类如下:

public partial class HangfireSyncServices : APIPageClass
{
    public void ADDRESS_SYNC()
    {
        string userName = Convert.ToString(Session[Constants.Sessions.LoggedInUser]).ToUpper();
                //Exception throwing on above statement..
        //........Rest code.......
    }
}

public abstract class APIPageClass : System.Web.UI.Page
{
    //common property & methods...
}

但是在获取“用户名”的价值时,我遇到了如下运行时异常: 会话状态只能在 enableSessionState 设置为 true 时使用,无论是在配置文件中还是在 Page 指令中。还请确保 System.Web.SessionStateModule 或自定义会话状态模块包含在 应用程序配置中的部分。

我已尝试使用此LINK 和其他解决方案来解决上述错误,但尚未解决。谁能帮我解决这个问题。

提前致谢,
雇人

【问题讨论】:

  • 您想在 Hangfire 作业中使用会话状态是没有意义的。 Hangfire 作业的全部意义在于它们在后台运行。因此,它们不会被绑定到会话。您将需要重新考虑架构。

标签: asp.net hangfire


【解决方案1】:

Hangfire 作业不会在与 asp.net 相同的上下文中运行,它有自己的线程池。事实上,如果您的hangfire 池中有多个服务器,Hangfire 作业甚至可能在与排队作业的服务器不同的服务器上执行。

您希望从作业中访问的任何数据都需要作为方法参数传入。例如:

public partial class HangfireSyncServices //: APIPageClass <- you can't do this..
{
    public void ADDRESS_SYNC(string userName)
    {
        //........Rest code.......
    }
}

string userName = Convert.ToString(Session[Constants.Sessions.LoggedInUser]).ToUpper();
RecurringJob.AddOrUpdate("ADDRESS_SYNC", () => objSync.ADDRESS_SYNC(userName), Cron.MinuteInterval(30));

请注意,执行上述操作会创建一个循环任务,该任务将始终为同一用户执行,即触发创建作业的 Web 请求的用户。

下一个问题:你试图在服务器启动时创建这个作业,所以还没有会话。只有在 Web 请求正在进行时,您才会获得会话。我无法帮助你,因为我不知道你实际上想要做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多