2017-02-27 91 views
4

我正在使用Hangfire來完成作業,並且我希望更改一天之後成功作業從數據庫中刪除的行爲 - 我希望將它們存儲爲年。設置Hangfire成功的作業失效屬性不起作用

繼此thread,這是相同this SO question的指示,我創建了一個類:

public class OneYearExpirationTimeAttribute : JobFilterAttribute, IApplyStateFilter 
{ 
    public void OnStateUnapplied(ApplyStateContext context, IWriteOnlyTransaction transaction) 
    { 
     context.JobExpirationTimeout = TimeSpan.FromDays(365); 
    } 

    public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction) 
    { 
     context.JobExpirationTimeout = TimeSpan.FromDays(365); 
    } 
} 

和我在Asp.net網頁API啓動類作爲一個全球性的過濾器進行註冊:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     // ... other stuff here ... 
     GlobalJobFilters.Filters.Add(new OneYearExpirationTimeAttribute()); 
     GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDBConnection"); 
     app.UseHangfireDashboard(); 
    } 
} 

的網絡API是其中職位張貼的地方(即調用BackgroundJob.Enqueue(() => ...)發生)。我沒有改變做實際工作的客戶的配置。

如果我現在發佈工作並且取得了成功,它仍然有每一天的到期,你可以在截圖,其中顯示,無論儀表板和中HangfireDb入口看到,

enter image description here

我在做什麼錯,或者我錯過了什麼?

+0

看看最後回答https://discuss.hangfire.io/t/how-to-configure-the-retention-time-of-job/34/11你應該配置'SQLServerStorage'類 – Alex

+0

可能[保留在Hangfire中執行超過1天的作業的歷史記錄]的副本(http://stackoverflow.com/questions/34450884/keep-history-of-jobs-executed-for-more-than-1-day-in - 大火) – Alex

+1

@Alex這不是重複的。 OP的實現類似於該問題的解決方案,但仍然存在問題。 –

回答

1

我在設置中的錯誤是該屬性被設置在錯誤的應用程序上。正如我在問題中所述,我將過濾器添加到發佈作業的asp.net web api的startup.cs文件中。

相反,我應該補充的配置在目前正在執行的作業的控制檯應用程序,也就是我的控制檯應用程序啓動與

static void Main(string[] args) 
{ 
    GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDBConnection"); 
    GlobalJobFilters.Filters.Add(new OneYearExpirationTimeAttribute()); 
    // ... more stuff ... 
} 

然後,它的工作原理。有關過濾器的配置位置,Hangfire文檔可能會更清晰一些。

+1

是的這個信息(該hangfire實際上並沒有在IIS中運行)會非常有用... –