0

私はasp.net mvc5 Webアプリケーションに取り組んでおり、Hangfireをインストールしました:-

Install-Package Hangfire

その後、次のように startup.css クラスを作成しました:-

public class Startup
{
   public void Configuration(IAppBuilder app)
   {

   }
}

次に、global.asax ファイル内で 2 つのアクション メソッドを呼び出してみました。Index ()& ScanServer()、次のように:-

 HomeController h = new HomeController();
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);


            RecurringJob.AddOrUpdate(() =>  h.Index(), Cron.Minutely);
        }

&

 RecurringJob.AddOrUpdate(() =>  h.ScanServer(*****), Cron.Minutely);

Hangfire が次の定義を持つ Index() アクション メソッドを呼び出そうとしたとき:-

 public ActionResult Index()

私はこのエラーを受け取りました:-

JobStorage.Current プロパティの値が初期化されていません。Hangfire クライアントまたはサーバー API を使用する前に設定する必要があります。

Hangfire が非同期タスクである ScanServer() アクション メソッドを呼び出そうとしたとき、次の定義があります:-

 public async Task<ActionResult> ScanServer(string tokenfrom)

私はこのエラーを受け取りました:-

非同期メソッドはサポートされていません。バックグラウンドで使用する前に同期してください。

誰でもこれら2つの問題を修正する方法をアドバイスできますか?

ありがとう

編集

Startup クラス内に次のように記述しました:-

using Hangfire;
using Microsoft.Owin;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ScanningFinal;
[assembly: OwinStartup(typeof(Startup))]
namespace ScanningFinal
{

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            GlobalConfiguration.Configuration
           .UseSqlServerStorage("scanservice");
        }
    }
}

& ここに接続文字列があります:-

 <add name="scanservice"    connectionString="data source=localhost;initial catalog=ScanningService;integrated security=True" providerName="System.Data.SqlClient"/>

しかし、私はまだこのエラーが発生しています:-

JobStorage.Current プロパティの値が初期化されていません。Hangfire クライアントまたはサーバー API を使用する前に設定する必要があります。

4

1 に答える 1

3

Configuration メソッド内で Hangfire を構成する必要があります。

[assembly: OwinStartup(typeof(YourApp.Startup))] // Change YourApp to your base namespace
public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseHangfire(config => 
        {
            config.UseSqlServerStorage("NameOfConnectionStringKey"); // Other storage options are available
            config.UseDashboardPath("/hangfire");
            config.UseServer();
        });
    }
}

基本的に、最初の問題は、データベースを使用するように Hangfire を構成していないことです。上記のソリューションでは、ジョブ ストレージとして SqlServer を使用するよう hangfire に指示し、web.config で定義されている connectionString キーを渡します。SQL Server を使用したくない場合は、他のストレージ オプションを使用できます。私のプロジェクトでは MongoDB で成功しています。

次に、ダッシュボードへのパスも設定して、ブラウザーできれいな UI にアクセスできるようにします。

ここでも、選択した依存性注入を指定できます。

2 番目の質問ですが、サービス メソッドを非同期から同期メソッドに変更できますか?

于 2015-09-10T15:47:43.780 に答える