Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在特定日期和时间发送通知_C#_Push Notification_Notifications - Fatal编程技术网

C# 在特定日期和时间发送通知

C# 在特定日期和时间发送通知,c#,push-notification,notifications,C#,Push Notification,Notifications,在我们的应用程序中,我们使用问题的开始日期、结束日期和结果日期存储问题。一旦问题的起始日期到达,我们需要向应用程序(iPhone和AndroID)发送通知 有人能告诉我我们怎样才能做到这一点吗 我们不想使用拉法。与特定的时间间隔类似,它将检查问题开始日期并发送通知 我有一个URL发送问题通知。当问题的开始日期到达时,我需要调用此URL 谢谢。使用电脑怎么样 您不想使用池,但如果您编写自己的类来封装计时器(例如System.Thread.Timer)并检查每秒的时间,则不会占用太多资源。根据您需要

在我们的应用程序中,我们使用问题的开始日期、结束日期和结果日期存储问题。一旦问题的起始日期到达,我们需要向应用程序(iPhone和AndroID)发送通知

有人能告诉我我们怎样才能做到这一点吗

我们不想使用拉法。与特定的时间间隔类似,它将检查问题开始日期并发送通知

我有一个URL发送问题通知。当问题的开始日期到达时,我需要调用此URL

谢谢。

使用电脑怎么样


您不想使用,但如果您编写自己的类来封装计时器(例如System.Thread.Timer)并检查每秒的时间,则不会占用太多资源。根据您需要的准确程度,您也可以减少检查频率,例如每分钟检查一次。也许你应该重新考虑一下。

看看石英:

Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统

您可以创建一个新的Quarts作业,我们称之为QuestionSenderJob。然后,您的应用程序可以在Quartz scheduler中创建一个任务,作业可以有多个具有自定义数据的同一作业的实例—在您的示例中是QuestionId

此外,它还支持在SQL数据库中存储作业调度(包括DDL脚本),因此,如果需要UI,您可以创建一些关系

您可以在Quartz.NET发行版的“database/dbtables”目录中找到表创建SQL脚本

这样你们就可以让石英引擎在适当的时候开火

当您学习Quartz.NET基础知识时,请参阅我为您的案例制作的代码片段,以便安排工作。也许有必要进行一些修改

IDictionary<string, object> jobData = new Dictionary<string, object> { { "QuestionId", questionId } };
var questionDate = new DateTime(2016, 09, 01);
var questionTriggerName = string.Format("Question{0}_Trigger", questionId);
var questionTrigger = TriggerBuilder.Create()
    .WithIdentity(questionTriggerName, "QuestionSendGroup")
    .StartAt(questionDate)
    .UsingJobData(new Quartz.JobDataMap(jobData))
    .Build();

scheduler
    .ScheduleJob(questionSenderJob, questionTrigger);

如果您使用任何第三方服务来管理推送通知,如Azure通知中心、Parse.com。。。它们提供了一种安排推送通知的集成方式。通过传递发送日期或让他们定期运行作业。我是Azure服务的用户,它工作得很好。

我现在能建议的最好的实现是让您从服务器发送通知。 您只需要一个好的调度程序就可以调度操作

对我来说,我的服务器是由Javascript(NodeJS)驱动的,所以我使用“节点调度”。我所做的就是

var schedule = require('node-schedule');

//Reporting rule at minute 1 every hour
    var rule = new schedule.RecurrenceRule();
    rule.minute = 1;
schedule.scheduleJob(rule, function () {
    console.log(new Date().toTimeString() + ' Testing Scheduler! Executing Every other minute');
//sendPush()
});

让我尝试这种方法并发送通知。我更新了一个答案,使您能够更轻松地前进:)感谢Edgars,这里还有一个问题是在应用程序回收(新部署、常规回收)之后,它将丢失所有已设置的计划工作。有没有办法坚持所有的工作?我也尝试过存储在SQL中。通过使用SQL,计划作业是持久的,我不知道我以前犯了什么错误。。它工作得很好。我为每个问题通知创建了单独的作业,因为问题的起始日期不同。谢谢。这是最好的方法,但因为我不是从azure发送通知,所以更新代码以从azure发送通知会花费更多时间。
var schedule = require('node-schedule');

//Reporting rule at minute 1 every hour
    var rule = new schedule.RecurrenceRule();
    rule.minute = 1;
schedule.scheduleJob(rule, function () {
    console.log(new Date().toTimeString() + ' Testing Scheduler! Executing Every other minute');
//sendPush()
});