如何使用ASP.NET配置Hangfire以从配置文件中获取连接字符串?

16 浏览
0 Comments

如何使用ASP.NET配置Hangfire以从配置文件中获取连接字符串?

请原谅我这个可能很愚蠢的问题,我对ASP.NET架构还不太熟悉。\n我接手了一个大型项目,打算使用hangfire.io。我知道我必须以某种方式初始化DB上下文,但我不想像hangfire文档建议的那样硬编码它。\n我的API\\Global.asax.cs目前如下所示,有趣的部分在// Hangfire stuff之后:\n

using System.Web.Http;
using System.Web.Http.ExceptionHandling;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Hangfire;
namespace API
{
   public class WebApiApplication : System.Web.HttpApplication
   {
       protected void Application_Start()
       {
          log4net.Config.XmlConfigurator.Configure();
          GlobalConfiguration.Configuration.Services.Add(typeof(IExceptionLogger), new GlobalExceptionLogger());
          GlobalConfiguration.Configuration.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
          MvcHandler.DisableMvcResponseHeader = true;
          AreaRegistration.RegisterAllAreas();
          GlobalConfiguration.Configure(WebApiConfig.Register);
          FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
          RouteConfig.RegisterRoutes(RouteTable.Routes);
          MapperConfig.RegisterMapper();
          // Hangfire stuff  
          GlobalConfiguration.Configuration.UseSqlServerStorage("HardcodedContextString");
          RecurringJob.AddOrUpdate("some-id", () => Console.WriteLine("My hangfire test."), "*/2 * * * 1-5"); 
       }
   }
}

\n我的数据库上下文myContext似乎在API\\connections.config中定义,其中包含以下内容:\n


  
    
  

\n我应该在HardcodedContextString的位置上放什么,以便让ASP.NET从相应的配置文件中读取连接字符串?\n附:有趣的是,在// Hangfire stuff下面的两行都被标成了红色。我错过了什么吗?\n

参考

\n

0
0 Comments

问题的原因是需要在ASP.NET中配置Hangfire,并从配置文件中获取连接字符串。解决方法如下:

1. 确保已安装Hangfire(参考Hangfire安装指南)。在Visual Studio Professional 2017中,可以通过以下步骤完成:

- 右键单击项目,选择“管理NuGet程序包”。

- 在右侧选择“包源:nuget.org”,然后在左上角的搜索栏中搜索“Hangfire”。

- 选择“Hangfire”并点击“安装”。可能需要在弹出窗口中点击“接受”。

2. 在Global.asax.cs的头部添加“using System.Configuration;”。

3. 在Global.asax.cs文件中定义一个变量,从“connections.config”文件中获取数据库上下文定义:

   string connString = ConfigurationManager.ConnectionStrings["ConStringName"].ToString();
   

4. 如果正在使用System.Web.Http,需要将所有的“GlobalConfiguration.xxx”替换为“System.Web.Http.GlobalConfiguration.xxx”。这是为了避免冲突,因为两个包都有一个(不同的)“GlobalConfiguration”属性。

5. 我们还需要指定Hangfire的完整命名空间。现在我们将使用“connString”。替换“GlobalConfiguration.Configuration.UseSqlServerStorage("HardcodedContextString");”为:

   Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage(connString);
   

6. 现在应该可以编译通过,没有错误。

PS:从https://stackoverflow.com/a/6134384/1236044中我学到了如何从配置文件中获取连接字符串的方法,感谢@jbl指导我。JBL还给了我关于命名空间冲突的提示。

0