如何使用ASP.NET配置Hangfire以从配置文件中获取连接字符串?
如何使用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
问题的原因是需要在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还给了我关于命名空间冲突的提示。