Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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 Mvc_Multi Tenant_Hangfire - Fatal编程技术网

C# 多租户应用程序的Hangfire服务器初始化

C# 多租户应用程序的Hangfire服务器初始化,c#,asp.net-mvc,multi-tenant,hangfire,C#,Asp.net Mvc,Multi Tenant,Hangfire,我面临为多租户应用程序添加Hangfire服务器的问题。在我的应用程序启动中,我循环遍历所有租户,并为每个租户初始化和添加一组作业。它正在每个租户数据库中添加服务器,但作业仅添加到第一个租户数据库。我在其他租户数据库和仪表板中看不到任何工作。以下是我正在尝试的代码: foreach (var tenant in TenantConvention.GetTenants()) { GlobalConfiguration.Configurati

我面临为多租户应用程序添加Hangfire服务器的问题。在我的应用程序启动中,我循环遍历所有租户,并为每个租户初始化和添加一组作业。它正在每个租户数据库中添加服务器,但作业仅添加到第一个租户数据库。我在其他租户数据库和仪表板中看不到任何工作。以下是我正在尝试的代码:

foreach (var tenant in TenantConvention.GetTenants())
            {

                GlobalConfiguration.Configuration
                 .UseSqlServerStorage(DbServer.GetConnectionString(tenant));

                var sqlStorage = new SqlServerStorage(DbServer.GetConnectionString(tenant));

                app.UseHangfireDashboard($"/dashboard/{tenant}-Jobs", new DashboardOptions
                {
                    Authorization = new[] { new HangfireAuthFilter() }

                }, sqlStorage);

                var options = new BackgroundJobServerOptions
                {                   
                    ServerName = tenant//string.Format("{0}.{1}", tenant, Guid.NewGuid().ToString())
                };

                var jobStorage = JobStorage.Current;
                app.UseHangfireServer(options, jobStorage);               

                var schedulars = ObjectFactory.GetAllInstances();
                foreach (var schedular in schedulars) {
                    schedular.Init();
                }

            }
任何帮助都将不胜感激。
谢谢

默认情况下不支持它,因此您应该使用
排队状态
,如下所示:

  Hangfire.States.IState state = new Hangfire.States.EnqueuedState
                {
                    Queue = serverName
                };  
  client.Create(() => Console.WriteLine(serverName), state); 
为了进行真正的测试,我在SQL Server中创建了两个名为
DB1
DB2
的数据库,并测试了以下代码(效果很好):

上面的代码是运行后的示例,我看到创建了两个作业,但位于不同的Db中,如下面的屏幕截图所示:


我认为您应该使用
BackgroundJobServerOptions
我正在使用它。您有在这种情况下如何使用它的示例@AriaI也在使用Hangfire,但我没有违反此方法,但我也在寻找此方法…试图提供帮助。好的,谢谢@Arias,你知道你将SQL server存储配置为
GlobalConfiguration
到first
tanent
连接。因此,所有作业都将在第一个数据库中创建。但它如何帮助重复作业呢。我有很多经常性的工作。每周每日etc@IrfanTahirKheli同样,将
name
作为第一个参数传递给
RecurringJob
就像
RecurringJob.AddOrUpdate(name,method,Cron.Yearly)当我将队列与定期作业添加一起使用时,它会将多个作业队列添加到同一数据库中。同样,所有的数据都会转到第一个数据库。如果您没有使用
全局配置.Configuration
,您可以看到我在示例代码中没有使用它。同样的事情。所有东西都降落在第一个服务器上
string[] connections = new string[] {
                "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=DB1",
                "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=DB2"}; 
foreach (string strConnection in connections)
     {
          string serverName = "str" + DateTime.Now.Ticks;
          var sqlStorage = new Hangfire.SqlServer.SqlServerStorage(strConnection);
          var options = new BackgroundJobServerOptions
            {
                ServerName =serverName  
            };
          JobStorage.Current = sqlStorage;
          IBackgroundJobClient client = new BackgroundJobClient();
          Hangfire.States.IState state = new Hangfire.States.EnqueuedState
                {
                    Queue = serverName
                };  
          client.Create(() => Console.WriteLine(serverName), state); 
     }