2017-04-04 24 views
4

我有一個控制檯應用程序來測試HangFire。下面是代碼:有沒有Hangfire的內存作業存儲包?

using System; 
using Hangfire; 

namespace MyScheduler.ConsoleApp 
{ 
    internal static class Program 
    { 
     internal static void Main(string[] args) 
     { 
      MyMethod(); 

      Console.WriteLine("[Finished]"); 
      Console.ReadKey(); 
     } 

     private static void MyMethod() 
     { 
      RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Minutely); 
     } 
    } 
} 

但它在運行時拋出異常:

其他信息:JobStorage.Current屬性值一直沒有 初始化。您必須在使用Hangfire客戶端或服務器的API之前將其設置。

所以我需要一個作業存儲來運行這個。但在SQL存儲等所有例子是否有任何方式來運行此示例與某種內存存儲?

JobStorage.Current = new SqlServerStorage("ConnectionStringName", options); 
// to 
JobStorage.Current = new MemoryDbStorage(string.Empty, options); 
+0

您是否嘗試過搜索「Hangfire內存」的Google搜索?我在10秒內找到了你的問題的答案。即使您決定不適合您,也有其他很多易於設置的選項,例如SQL Server LocalDB,SQLite和Mongo。 – mason

+0

我更新了我的問題。而且文件也應該更新。祝你今天愉快。 –

+0

NuGet的搜索功能不太好。使用Google/Bing。無論如何,沒有必要告訴我們*關於文件。您可以提交拉取請求來更新它或在其[GitHub](https://github.com/HangfireIO/Hangfire-Documentation)上提出問題。無論如何,我認爲他們的文檔沒有問題。如果你讀過它,「Hangfire.Core就足夠了」顯然是指不安裝主要的「Hangfire」包,它具有控制檯應用程序不需要的依賴關係。並且在上面它清楚地陳述您需要工作存儲包裹。我很清楚。 – mason

回答

16

您可以使用Hangfire.MemoryStorage這個。

只需添加this nuget package

然後你就可以使用它像 -

GlobalConfiguration.Configuration.UseMemoryStorage(); 
+2

你有沒有聽說過「[教一個人釣魚](https://zh.wiktionary.org/wiki/give_a_man_a_fish_and_you_feed_him_for_a_day ;_teach_a_man_to_fish_and_you_feed_him_for_a_lifetime)」? – mason

+2

@mason:是的,聽說:),但以防萬一...,可能是他感到困惑或種類,我不知道。但他發佈了q。,這比谷歌搜索更努力,所以我想他可能需要我們的答案:) – Yogi

+1

感謝您的回答和魚。我更新了我的問題,告訴我的故事「爲什麼我錯過了這個」 –

1

正如約吉說,你可以使用Hangfire.MemoryStorage或Hangfire.MemoryStorage.Core(對於.NET核心)。

什麼是這個問題的答案缺少的是完整的代碼(對於.NET核心),需要內部ConfigureServices被投入(..):

var inMemory = GlobalConfiguration.Configuration.UseMemoryStorage(); 
services.AddHangfire(x => x.UseStorage(inMemory)); 
2

淨核心(Web應用程序):

只是爲了讓它變得非常明顯,因爲它對我來說並不明顯。

安裝以下的NuGet包:

  • 遲髮型。 ASPNET核心(v1.6.17 atow)
  • Hangfire.MemoryStorage.Core(V1.4.0 atow)

在Startup.cs:

public void ConfigureServices(IServiceCollection services) 
    { 
     // other registered services 
     ... 

     services.AddHangfire(c => c.UseMemoryStorage()); 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     // other pipeline configuration    
     ... 

     app.UseHangfireServer(); 

     app.UseMvc(); 
    } 

任何少於上述和我的排隊的方法沒有開火。