当前位置: 首页 > news >正文

ASP.NET MVC 迅速集成 SignalR

在现代 Web 应用程序中,实时更新数据是一个常见需求。本文将详细介绍如何在 ASP.NET MVC 项目中使用 SignalR 实现定时任务操作数据库并将数据更新到网页。我们将逐步讲解如何配置 SignalR、创建定时任务、操作数据库以及在前端显示实时数据。

目录

  1. 项目初始化
  2. 安装和配置 SignalR
  3. 创建数据库和模型
  4. 创建 SignalR Hub
  5. 实现定时任务
  6. 前端页面和脚本
  7. 运行和测试

1. 项目初始化

首先,创建一个新的 ASP.NET MVC 项目。
● 打开 Visual Studio,选择 File > New > Project。
● 选择 ASP.NET Web Application,命名项目为 RealTimeDataUpdate。
● 选择 MVC 模板并点击 Create。

2. 安装和配置 SignalR

在项目中安装 SignalR 包,并进行配置。

  • .打开 NuGet 包管理器控制台,运行以下命令:
Install-Package Microsoft.AspNet.SignalR
  • .在 Startup.cs 文件中配置 SignalR:
using Microsoft.Owin;
using Owin;[assembly: OwinStartup(typeof(RealTimeDataUpdate.Startup))]
namespace RealTimeDataUpdate
{public class Startup{public void Configuration(IAppBuilder app){app.MapSignalR();}}
}

3. 创建数据库和模型

创建一个简单的数据库和模型来存储和获取数据。

1. 创建一个名为 DataContext 的类:
using System.Data.Entity;public class DataContext : DbContext
{public DbSet<SensorData> SensorData { get; set; }
}public class SensorData
{public int Id { get; set; }public string Temperature { get; set; }public string Humidity { get; set; }public DateTime Timestamp { get; set; }
}

2. 在 Web.config 文件中添加数据库连接字符串:

<connectionStrings><add name="DataContext" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=RealTimeData;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

4. 创建 SignalR Hub

创建一个 SignalR Hub 来处理客户端连接和数据更新。

1. 创建一个名为 DataHub 的类:

using Microsoft.AspNet.SignalR;public class DataHub : Hub
{public void SendData(string temperature, string humidity){Clients.All.updateData(new { Temperature = temperature, Humidity = humidity, Timestamp = DateTime.Now });}
}

5. 实现定时任务

使用 System.Threading.Timer 实现定时任务,每隔一段时间从数据库获取数据并通过 SignalR 更新到客户端。

1. 创建一个名为 DataScheduler 的类:

using System;
using System.Threading;public class DataScheduler
{private Timer _timer;public void Start(){_timer = new Timer(UpdateData, null, 0, 5000); // 每5秒执行一次}private void UpdateData(object state){using (var context = new DataContext()){var latestData = context.SensorData.OrderByDescending(d => d.Timestamp).FirstOrDefault();if (latestData != null){var hubContext = GlobalHost.ConnectionManager.GetHubContext<DataHub>();hubContext.Clients.All.updateData(new{Temperature = latestData.Temperature,Humidity = latestData.Humidity,Timestamp = latestData.Timestamp});}}}
}

2. 在 Global.asax 文件中启动定时任务:

protected void Application_Start()
{AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);var scheduler = new DataScheduler();scheduler.Start();
}

6. 前端页面和脚本

创建一个简单的前端页面来显示实时数据。

1. 在 Views/Home/Index.cshtml 文件中添加以下代码:

@model IEnumerable<RealTimeDataUpdate.Models.SensorData>@{ViewBag.Title = "实时数据监测";
}<h2>最新温湿度数据</h2><table><tr><th>Temperature</th><th>Humidity</th><th>Timestamp</th></tr><tr><td id="temperature"></td><td id="humidity"></td><td id="timestamp"></td></tr></table><script src="~/Scripts/jquery-3.6.0.min.js"></script><script src="~/Scripts/jquery.signalR-2.4.2.min.js"></script><script src="~/signalr/hubs"></script><script type="text/javascript">$(document).ready(function() {var hub = $.connection.dataHub;hub.client.updateData = function (data) {$('#temperature').text(data.Temperature);$('#humidity').text(data.Humidity);$('#timestamp').text(data.Timestamp);};$.connection.hub.start().done(function () {console.log("SignalR connected");});});
</script>

7. 运行和测试

  • 运行项目,确保数据库已创建并有一些初始数据。
  • 打开浏览器,访问你的应用程序,应该可以看到实时更新的温湿度数据。

通过以上步骤,你已经成功在 ASP.NET MVC 项目中使用 SignalR 实现了定时任务操作数据库并实时更新网页数据。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 将硬盘的GPT 转化为MBR格式
  • 如何避免在使用 Context API 时出现状态管理的常见问题?
  • Redhat 7,8系(复刻系列) 一键部署Oracle21c-xe rpm
  • 在Android中fragment的生命周期
  • 【多模态融合】【NeurIPS 2021】Attention Bottlenecks for Multimodal Fusion
  • 2025年国家级高新技术企业认定,这些公司过不了了!
  • leetcode 105.从前序与中序遍历序列构造二叉树
  • 创客中国AIGC专题赛冠军天鹜科技:AI蛋白质设计引领者
  • 掌握ChatGPT:高效利用AI助手
  • Spring Boot与gRPC的完美融合:构建高效用户服务与订单服务通信
  • 【网络安全】分享4个高危业务逻辑漏洞
  • 影刀RPE学习——自动化
  • 浅谈C#之AutoResetEvent和ManualResetEvent
  • 第k个排列 - 华为OD统一考试(E卷)
  • Java学习路线
  • .pyc 想到的一些问题
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • co.js - 让异步代码同步化
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mac修复ab及siege安装
  • PHP那些事儿
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 关于for循环的简单归纳
  • 近期前端发展计划
  • 区块链将重新定义世界
  • 深入浏览器事件循环的本质
  • 十年未变!安全,谁之责?(下)
  • 微信支付JSAPI,实测!终极方案
  • 在Docker Swarm上部署Apache Storm:第1部分
  • raise 与 raise ... from 的区别
  • ​Java并发新构件之Exchanger
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #13 yum、编译安装与sed命令的使用
  • (~_~)
  • (03)光刻——半导体电路的绘制
  • (3)nginx 配置(nginx.conf)
  • (ibm)Java 语言的 XPath API
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (笔试题)分解质因式
  • (独孤九剑)--文件系统
  • (转)Windows2003安全设置/维护
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .axf 转化 .bin文件 的方法
  • .NET C# 操作Neo4j图数据库
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET MVC 验证码
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET正则基础之——正则委托
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • 。。。。。
  • @font-face 用字体画图标