如何使用 ASP.NET 配置 hangfire 以从配置文件获取连接字符串?
How to configure hangfire with ASP.NET to obtain connection string from config file?
请原谅我这个可能很愚蠢的问题,我对ASP.NET架构总体上还是不太熟悉。
我继承了一个大项目,我打算setup hangfire.io。我知道我必须以某种方式初始化数据库上下文,但我不想按照 hangfire-docu 的建议对其进行硬编码。
我的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
下面的两行都带有红色下划线。我想念什么?
参考资料
- 确保确实安装了
Hangfire
(另请参阅 Hangfire Installation Guide)。对于 Visual Studio Professional 2017,您可以执行以下操作:
- Right-click 在您的项目上,然后单击
Manage NuGet Packages
。
- Select 数据包来源:右侧
nuget.org
,使用左上角的搜索栏搜索Hangfire
。
- Select
Hangfire
并单击 安装 。当出现 popup-window 时,您可能必须单击 接受 。
- 在
Global.asax.cs
的header中添加using System.Configuration;
。以下所有步骤都将在该文件中发生。
- 定义一个从
connections.config
: 获取数据库上下文定义的变量
string connString = ConfigurationManager.ConnectionStrings["ConStringName"].ToString();
- 如果您像我一样使用
System.Web.Http
,则必须将所有出现的 GlobalConfiguration.xxx
替换为 System.Web.Http.GlobalConfiguration.xxx
。这是避免冲突所必需的,因为两个包都有(不同的)GlobalConfiguration
属性.
- 我们还必须为 Hangfire 指定全名space。我们现在也将使用
connString
:我们用 GlobalConfiguration.Configuration.UseSqlServerStorage("HardcodedContextString");
代替
必须写
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage(connString);
- 现在一切都应该可以正确编译。
PS: 来自 https://whosebug.com/a/6134384/1236044 I learned how to obtain the connection string from the config file-- thanks @jbl 的指点。 JBL 也给了我有关名称 space 冲突的提示。
请原谅我这个可能很愚蠢的问题,我对ASP.NET架构总体上还是不太熟悉。
我继承了一个大项目,我打算setup hangfire.io。我知道我必须以某种方式初始化数据库上下文,但我不想按照 hangfire-docu 的建议对其进行硬编码。
我的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
下面的两行都带有红色下划线。我想念什么?
参考资料
- 确保确实安装了
Hangfire
(另请参阅 Hangfire Installation Guide)。对于 Visual Studio Professional 2017,您可以执行以下操作:- Right-click 在您的项目上,然后单击
Manage NuGet Packages
。 - Select 数据包来源:右侧
nuget.org
,使用左上角的搜索栏搜索Hangfire
。 - Select
Hangfire
并单击 安装 。当出现 popup-window 时,您可能必须单击 接受 。
- Right-click 在您的项目上,然后单击
- 在
Global.asax.cs
的header中添加using System.Configuration;
。以下所有步骤都将在该文件中发生。 - 定义一个从
connections.config
: 获取数据库上下文定义的变量
string connString = ConfigurationManager.ConnectionStrings["ConStringName"].ToString();
- 如果您像我一样使用
System.Web.Http
,则必须将所有出现的GlobalConfiguration.xxx
替换为System.Web.Http.GlobalConfiguration.xxx
。这是避免冲突所必需的,因为两个包都有(不同的)GlobalConfiguration
属性. - 我们还必须为 Hangfire 指定全名space。我们现在也将使用
connString
:我们用GlobalConfiguration.Configuration.UseSqlServerStorage("HardcodedContextString");
代替 必须写
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage(connString);
- 现在一切都应该可以正确编译。
PS: 来自 https://whosebug.com/a/6134384/1236044 I learned how to obtain the connection string from the config file-- thanks @jbl 的指点。 JBL 也给了我有关名称 space 冲突的提示。