Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Hangfire调用异步操作方法_C#_Asp.net_Asynchronous_Asp.net Mvc 5_Hangfire - Fatal编程技术网

C# 如何使用Hangfire调用异步操作方法

C# 如何使用Hangfire调用异步操作方法,c#,asp.net,asynchronous,asp.net-mvc-5,hangfire,C#,Asp.net,Asynchronous,Asp.net Mvc 5,Hangfire,我正在开发asp.net mvc5 web应用程序,并安装了Hangfire:- Install-Package Hangfire 之后,我创建了一个startup.css类,如下所示:- public class Startup { public void Configuration(IAppBuilder app) { } } HomeController h = new HomeController(); protected void Applic

我正在开发asp.net mvc5 web应用程序,并安装了Hangfire:-

Install-Package Hangfire
之后,我创建了一个startup.css类,如下所示:-

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

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


            RecurringJob.AddOrUpdate(() =>  h.Index(), Cron.Minutely);
        }
然后在我的global.asax文件中,我尝试调用2个动作方法<代码>索引()和
扫描服务器()
,如下所示:-

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

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


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

现在,当Hangfire尝试调用具有以下定义的Index()操作方法时:-

 public ActionResult Index()
 public async Task<ActionResult> ScanServer(string tokenfrom)
我得到了这个错误:-

JobStorage。当前属性值尚未初始化。你必须 在使用Hangfire客户端或服务器API之前进行设置

当Hangfire尝试调用ScanServer()操作方法时,该方法是一个异步任务,具有以下定义:-

 public ActionResult Index()
 public async Task<ActionResult> ScanServer(string tokenfrom)
&以下是连接字符串:-

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

但我仍然得到这个错误:-

JobStorage。当前属性值尚未初始化。你必须 在使用Hangfire客户端或服务器API之前进行设置


您需要在配置方法中配置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配置为使用数据库。在上述解决方案中,我告诉hangfire使用SqlServer作为作业存储,并将web.config中定义的connectionString键传递给它。如果您不希望使用SQL Server,那么您可以使用其他存储选项—我在项目中成功地使用了MongoDB

然后我还要设置仪表板的路径,这样您就可以在浏览器中访问漂亮的UI

您也可以在这里提供您选择的依赖项注入


至于第二个问题,您是否能够将服务方法从异步更改为同步方法?

您需要在配置方法中配置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配置为使用数据库。在上述解决方案中,我告诉hangfire使用SqlServer作为作业存储,并将web.config中定义的connectionString键传递给它。如果您不希望使用SQL Server,那么您可以使用其他存储选项—我在项目中成功地使用了MongoDB

然后我还要设置仪表板的路径,这样您就可以在浏览器中访问漂亮的UI

您也可以在这里提供您选择的依赖项注入


至于第二个问题,您是否能够将服务方法从异步更改为同步方法?

您需要在配置方法中配置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配置为使用数据库。在上述解决方案中,我告诉hangfire使用SqlServer作为作业存储,并将web.config中定义的connectionString键传递给它。如果您不希望使用SQL Server,那么您可以使用其他存储选项—我在项目中成功地使用了MongoDB

然后我还要设置仪表板的路径,这样您就可以在浏览器中访问漂亮的UI

您也可以在这里提供您选择的依赖项注入


至于第二个问题,您是否能够将服务方法从异步更改为同步方法?

您需要在配置方法中配置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配置为使用数据库。在上述解决方案中,我告诉hangfire使用SqlServer作为作业存储,并将web.config中定义的connectionString键传递给它。如果您不希望使用SQL Server,那么您可以使用其他存储选项—我在项目中成功地使用了MongoDB

然后我还要设置仪表板的路径,这样您就可以在浏览器中访问漂亮的UI

您也可以在这里提供您选择的依赖项注入



至于第二个问题,您是否能够将服务方法从异步更改为同步方法?

您是否在启动类中将配置方法保留为空?Hangfire必须有一个数据库来存储作业。一定要阅读。看看它怎么说
.UseSqlServer
?您需要这样做,或者使用文档中列出的其他作业存储数据库之一,例如Redis或MongoDB。@但是我可以强制它将作业存储在文本文件中吗?或者它需要一个DB?@Tom是的,我留下了空的,我想如果我想进入仪表板,我需要它们?这是否也会导致调用异步操作方法的问题?Hangfire如何知道是它创建了它们还是其他东西创建了它们?不会的。因此,如果您有为其设置DB的脚本,那么就使用它。您是否在Startup类中保留了空的配置方法?Hangfire必须有一个数据库来存储作业。一定要阅读。看看它怎么说
.UseSqlServer
?您需要这样做,或者使用文档中列出的其他作业存储数据库之一,例如Redis或MongoDB。@但是我可以强制它将作业存储在文本文件中吗?或者它需要一个DB?@Tom是的,我留下了空的,我想如果我想进入仪表板,我需要它们?这是否也会导致调用异步操作方法的问题?Hangfire如何知道是它创建了它们还是其他东西创建了它们?不会的。因此,如果您有为其设置DB的脚本,那么就使用它。您是否在Startup类中保留了空的配置方法?Hangfire必须有一个数据库来存储作业。一定要阅读。看看它怎么说
.UseSqlServer
?您需要这样做,或者使用文档中列出的其他作业存储数据库之一,例如Redis或MongoDB。@但是我可以强制它将作业存储在文本文件中吗?或者它需要一个DB?@Tom是的,我留下了空的,我想如果我想进入仪表板,我需要它们?这是否也会导致调用异步操作方法的问题?Hangfire如何知道它是否创建了异步操作方法,或者是否有其他方法创建了异步操作方法