Как настроить Hangfire с ASP. NET для получения строки подключения из файла конфигурации? - PullRequest
1 голос
/ 14 января 2020

Пожалуйста, простите мне этот, вероятно, глупый вопрос, я все еще не слишком знаком с архитектурой ASP. NET в целом.

Я унаследовал большой проект и намереваюсь установить hangfire.io . Я понимаю, что должен каким-то образом инициализировать контекст БД, но я не хочу жестко его кодировать, как это предлагается в документе hangfire-document.

Мой API\Global.asax.cs в настоящее время выглядит следующим образом, интересный материал начинается после // 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"); 
       }
   }
}

Кажется, что контекст моей базы данных myContext определен внутри API\connections.config, который содержит следующее строки:

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

Что я должен поставить вместо HardcodedContextString, чтобы ASP. NET прочитал строку подключения из соответствующего файла конфигурации?

PS: Интересно, что обе строки под // Hangfire stuff подчеркнуты красным. Чего мне не хватает?

Ссылки

1 Ответ

0 голосов
/ 15 января 2020
  1. Убедитесь, что Hangfire действительно установлен (см. Также Руководство по установке Hangfire ). Для Visual Studio Professional 2017 вы можете сделать следующее:
    1. Щелкните правой кнопкой мыши свой проект и выберите Manage NuGet Packages.
    2. Выберите Источник пакета: nuget.org вкл. справа найдите Hangfire, используя строку поиска в левом верхнем углу.
    3. Выберите Hangfire и нажмите Установить . Возможно, вам придется нажать Принять , когда появится всплывающее окно.
  2. Добавить using System.Configuration; в заголовок Global.asax.cs. В этом файле будут выполняться все следующие шаги.
  3. Определить переменную, которая получает определение контекста базы данных из connections.config:
string connString = ConfigurationManager.ConnectionStrings["ConStringName"].ToString();
Если вы используете System.Web.Http, как я, вы должны заменить все появления GlobalConfiguration.xxx на System.Web.Http.GlobalConfiguration.xxx. Это необходимо, чтобы избежать конфликта, поскольку оба пакета имеют (разные) свойства GlobalConfiguration. Мы также должны указать полное пространство имен для Hangfire. Мы также будем использовать connString сейчас: вместо GlobalConfiguration.Configuration.UseSqlServerStorage("HardcodedContextString"); мы должны написать
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage(connString);
Теперь все должно компилироваться без ошибок.

PS: С { ссылка } Я узнал, как получить строку подключения из файла конфигурации - - спасибо @ jbl за указание на это. JBL также дал мне подсказку о конфликте пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...