How to configure hangfire with ASP.NET to obtain connection string from config file?

Please forgive me this probably stupid question, I am still not too familiar with the ASP.NET architecture in general.

I inherited a large project, and I intend to setup hangfire.io. I understand that I have to somehow initialize the DB context, but I do not want to hardcode it as suggested by the hangfire-docu.

My APIGlobal.asax.cs currently looks as follows, the interesting stuff begins after // Hangfire stuff:

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"); 
       }
   }
}

My database context myContext seems to defined inside APIconnections.config which contains the following lines:

<?xml version="1.0"?>
  <connectionStrings>
    <add name="myContext" connectionString="Data Source=localhostsqlexpress;Initial Catalog=myContext;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
  </connectionStrings>

What shall I put instead of HardcodedContextString to make ASP.NET read the connection string from the respective configuration file?

PS: Interestingly, both lines underneath // Hangfire stuff is underlined in red. What do I miss?

References

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

  1. Make sure that Hangfire is actually installed (see also Hangfire Installation Guide). For Visual Studio Professional 2017, you can do the following:
    1. Right-click on your project and click Manage NuGet Packages.
    2. Select Packet source: nuget.org on the right, search for Hangfire using the search bar on the top left.
    3. Select Hangfire and click Install. You might have to click on Accept when a popup-window appears.
  2. Add using System.Configuration; in the header of Global.asax.cs. All following steps will happen within that file.
  3. Define a variable which obtains the data base context definition from connections.config:
string connString = ConfigurationManager.ConnectionStrings["ConStringName"].ToString();
  1. If you are using System.Web.Http like me, you have to replace all appearances of GlobalConfiguration.xxx with System.Web.Http.GlobalConfiguration.xxx. This is necessary to avoid a conflict since both packages have a (different) GlobalConfiguration property.
  2. We also have to specify the full namespace for Hangfire. We will also use connString now: Instead of GlobalConfiguration.Configuration.UseSqlServerStorage("HardcodedContextString"); we
    have to write
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage(connString);
  1. Everything should now compile without errors.

PS: From https://stackoverflow.com/a/6134384/1236044 I learned how to obtain the connection string from the config file– thanks @jbl for pointing me to that. JBL also gave me the hint about the name space conflict.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x