Я создал приложение MVC, в котором я реализовал Quartz-планировщик, чтобы вытащить обменный курс в определенное время утром. он работает на Dev, но когда я загружаю на удаленный сервер, он не работает.
Проблема в том, что на удаленном сервере Quartz Scheduler вообще не запускается, поэтому обменный курс получить невозможно.
что-то нужно скопировать на удаленный сервер
есть ли настройка, которую мне нужно установить.
так я реализовал вытягивание обменного курса.
public class JobScheduler
{
public static async Task Start()
{
ISchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = await factory.GetScheduler();
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("name", "group")
.UsingJobData("Name", "Bob")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule
(s =>
s.WithIntervalInHours(24)
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(14,08))
)
.Build();
await scheduler.ScheduleJob(job, trigger);
await scheduler.Start();
//Thread.Sleep(TimeSpan.FromMinutes(10));
//await scheduler.Shutdown();
}
}
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
DateTime now = DateTime.Now;
var rate = GetRate();
if (rate != 0)
{
System.Diagnostics.Debug.WriteLine($"Exchange Rate: {rate}");
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Default"].ConnectionString))
{
if (connection.State == System.Data.ConnectionState.Closed)
await connection.OpenAsync();
var cmd = new SqlCommand($"SELECT Value FROM AppConfigurations WHERE Name = '{AppConfigarationItems.FallBackExchangeRate}'", connection);
object value = cmd.ExecuteScalar();
if (value == null)
{
var sql = $@"INSERT INTO AppConfigurations (Name,Value,DoubleValue,LastUpdateDate)
VALUES ('{AppConfigarationItems.FallBackExchangeRate}','{rate.ToString().Replace(',', '.')}',{rate.ToString().Replace(',', '.')},'{now}')";
cmd = new SqlCommand(sql, connection);
int result = cmd.ExecuteNonQuery();
}
else
{
var sql = $@"UPDATE AppConfigurations
SET Value = '{rate.ToString().Replace(',', '.')}',
DoubleValue = {rate.ToString().Replace(',', '.')},
LastUpdateDate = '{now}'
WHERE Name = '{AppConfigarationItems.FallBackExchangeRate}'";
cmd = new SqlCommand(sql, connection);
int result = cmd.ExecuteNonQuery();
}
}
}
}
protected override void Application_Start(object sender, EventArgs e)
{
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("en-ZA");
AbpBootstrapper.IocManager.IocContainer.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithConfig("log4net.config"));
base.Application_Start(sender, e);
JobScheduler.Start().Wait();
}