C# 如何使用Hangfire调用异步操作方法
我正在开发asp.net mvc5 web应用程序,并安装了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
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如何知道它是否创建了异步操作方法,或者是否有其他方法创建了异步操作方法