C# MVC4中使用信号器的提醒模型
概述:我想创建一个余数,用于用户输入报警通知。我有一个带有用户名和输入日期的查看页面。若提交成功,则应将其存储在数据库中。如果客户端时间(机器时间)和用户输入时间(服务器时间)匹配,我想使用信号器触发提醒。它应该提供一个弹出窗口,显示带有用户名和提醒时间的通知 说明:C# MVC4中使用信号器的提醒模型,c#,asp.net,asp.net-mvc,asp.net-mvc-4,azure,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Azure,概述:我想创建一个余数,用于用户输入报警通知。我有一个带有用户名和输入日期的查看页面。若提交成功,则应将其存储在数据库中。如果客户端时间(机器时间)和用户输入时间(服务器时间)匹配,我想使用信号器触发提醒。它应该提供一个弹出窗口,显示带有用户名和提醒时间的通知 说明: Homepage Username: textbox Reminder date and time: textbox Save reminder: button 用户单击“保存提醒”,时间将保存在数据库中。 当当前时间与使
Homepage
Username: textbox
Reminder date and time: textbox
Save reminder: button
用户单击“保存提醒”,时间将保存在数据库中。
当当前时间与使用信号R的提醒日期和时间相对应时,显示带有用户名的弹出窗口
(要检查输出,请在两个不同的浏览器中打开localhost url,并查看弹出窗口是否同时打开。)一个好的开始是,请记住,检查日期是否匹配需要某种定期任务(如果要将所有内容都保存在同一个web应用程序中,可以查看)
一种简单的方法如下所示:
集线器
Kepp指出,如果您有多个服务器或工作进程,您可能必须将SignalR连接和用户名之间的映射存储在其他位置
任务
对于定期任务,您有多个选项,一个HangFire任务、一个窗口服务或一个作为计划任务运行的简单控制台应用程序
我将假设这是一个控制台应用程序
您将需要,查看一下客户端的正确设置
var hubConnection = new HubConnection("**YOUR URL**);
await hubConnection.Start();
IHubProxy proxy = hubConnection.CreateHubProxy("ReminderHub");
// QUERY THE DATABASE Check if there's any user to notify
for(var username in UsersToNotify){
proxy.Invoke("Notify", username);
}
请记住,我有很多改进。这段代码只是一种简单的方法。这里是否有使用字典的替代品?当然,实际上您可能已经有了某种身份验证。请看一看,您可以使用Redis或服务状态服务器之类的工具来映射。我还有一个疑问。我需要为用户输入显示datetime控件。我知道HTML5中有datetime输入类型。但是我的浏览器不支持datetime。那么我如何显示datetime控件呢?嗨,这个问题与原来的问题没有特别的关系。有很多选择,你可以选择,或者像这样的轻量级解决方案。
var hub = $.connection.reminderHub;
hub.client.notify = function (username) {
alert(username)
};
$.connection.hub.start().done(function () {
// Wire up save reminder option.
$('#save').click(function () {
hub.server.Store($('#username').val(), $('#date').val());
});
});
var hubConnection = new HubConnection("**YOUR URL**);
await hubConnection.Start();
IHubProxy proxy = hubConnection.CreateHubProxy("ReminderHub");
// QUERY THE DATABASE Check if there's any user to notify
for(var username in UsersToNotify){
proxy.Invoke("Notify", username);
}