ASP.NET MVC 迅速集成 SignalR的過(guò)程
在現(xiàn)代 Web 應(yīng)用程序中,實(shí)時(shí)更新數(shù)據(jù)是一個(gè)常見需求。本文將詳細(xì)介紹如何在 ASP.NET MVC 項(xiàng)目中使用 SignalR 實(shí)現(xiàn)定時(shí)任務(wù)操作數(shù)據(jù)庫(kù)并將數(shù)據(jù)更新到網(wǎng)頁(yè)。我們將逐步講解如何配置 SignalR、創(chuàng)建定時(shí)任務(wù)、操作數(shù)據(jù)庫(kù)以及在前端顯示實(shí)時(shí)數(shù)據(jù)。
1. 項(xiàng)目初始化
首先,創(chuàng)建一個(gè)新的 ASP.NET MVC 項(xiàng)目。
● 打開 Visual Studio,選擇 File > New > Project。
● 選擇 ASP.NET Web Application,命名項(xiàng)目為 RealTimeDataUpdate。
● 選擇 MVC 模板并點(diǎn)擊 Create。
2. 安裝和配置 SignalR
在項(xiàng)目中安裝 SignalR 包,并進(jìn)行配置。
.打開 NuGet 包管理器控制臺(tái),運(yùn)行以下命令:
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. 創(chuàng)建數(shù)據(jù)庫(kù)和模型
創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)和模型來(lái)存儲(chǔ)和獲取數(shù)據(jù)。
1. 創(chuàng)建一個(gè)名為 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 文件中添加數(shù)據(jù)庫(kù)連接字符串:
<connectionStrings> <add name="DataContext" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=RealTimeData;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings>
4. 創(chuàng)建 SignalR Hub
創(chuàng)建一個(gè) SignalR Hub 來(lái)處理客戶端連接和數(shù)據(jù)更新。
1. 創(chuàng)建一個(gè)名為 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. 實(shí)現(xiàn)定時(shí)任務(wù)
使用 System.Threading.Timer 實(shí)現(xiàn)定時(shí)任務(wù),每隔一段時(shí)間從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)并通過(guò) SignalR 更新到客戶端。
1. 創(chuàng)建一個(gè)名為 DataScheduler 的類:
using System; using System.Threading; public class DataScheduler { private Timer _timer; public void Start() { _timer = new Timer(UpdateData, null, 0, 5000); // 每5秒執(zhí)行一次 } 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 文件中啟動(dòng)定時(shí)任務(wù):
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. 前端頁(yè)面和腳本
創(chuàng)建一個(gè)簡(jiǎn)單的前端頁(yè)面來(lái)顯示實(shí)時(shí)數(shù)據(jù)。
1. 在 Views/Home/Index.cshtml 文件中添加以下代碼:
@model IEnumerable<RealTimeDataUpdate.Models.SensorData> @{ ViewBag.Title = "實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè)"; } <h2>最新溫濕度數(shù)據(jù)</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. 運(yùn)行和測(cè)試
- 運(yùn)行項(xiàng)目,確保數(shù)據(jù)庫(kù)已創(chuàng)建并有一些初始數(shù)據(jù)。
- 打開瀏覽器,訪問(wèn)你的應(yīng)用程序,應(yīng)該可以看到實(shí)時(shí)更新的溫濕度數(shù)據(jù)。
通過(guò)以上步驟,你已經(jīng)成功在 ASP.NET MVC 項(xiàng)目中使用 SignalR 實(shí)現(xiàn)了定時(shí)任務(wù)操作數(shù)據(jù)庫(kù)并實(shí)時(shí)更新網(wǎng)頁(yè)數(shù)據(jù)。
到此這篇關(guān)于ASP.NET MVC 迅速集成 SignalR的文章就介紹到這了,更多相關(guān)ASP.NET MVC集成 SignalR內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET生成eurl.axd Http異常錯(cuò)誤的處理方法
在IIS6中同時(shí)啟用了ASP.NET 2.0 和 ASP.NET 4.0 后,網(wǎng)站程序可能會(huì)出現(xiàn)如下錯(cuò)誤:“ System.Web.HttpException: Path ‘//eurl.axd/‘ was not found. ”2011-05-05.net mvc超過(guò)了最大請(qǐng)求長(zhǎng)度的解決方法
這篇文章主要為大家詳細(xì)介紹了.net mvc超過(guò)了最大請(qǐng)求長(zhǎng)度的解決方法,限制文件上傳大小,感興趣的小伙伴們可以參考一下2016-07-07ASP.Net MVC 布局頁(yè)、模板頁(yè)使用方法詳細(xì)介紹
這篇文章主要介紹了ASP.Net MVC 布局頁(yè)、模板頁(yè)使用方法詳細(xì)介紹,需要的朋友可以參考下2017-08-08Visual Studio實(shí)現(xiàn)xml文件使用app.config、web.config等的智能提示
這篇文章主要為大家詳細(xì)介紹了Visual Studio中xml文件使用app.config、web.config等的智能提示方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09使用DataTable更新數(shù)據(jù)庫(kù)(增,刪,改)
使用DataTable更新數(shù)據(jù)庫(kù)(增,刪,改),需要的朋友可以參考一下2013-03-03解決uploadify使用時(shí)session發(fā)生丟失問(wèn)題的方法
這篇文章主要為大家詳細(xì)介紹了uploadify使用時(shí)發(fā)現(xiàn)session發(fā)生丟失問(wèn)題的解決方法,遇到過(guò)類似問(wèn)題的朋友可以參考本文進(jìn)行解決2016-05-05.NET客戶端實(shí)現(xiàn)Redis中的管道(PipeLine)與事物(Transactions)
本文主要介紹了.NET客戶端實(shí)現(xiàn)Redis中的管道(PipeLine)與事物(Transactions)的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-03-03Asp.net中時(shí)間格式化的6種方法詳細(xì)總結(jié)
數(shù)據(jù)控件綁定時(shí)格式化日期方法/用DataBinder.Eval進(jìn)行數(shù)據(jù)綁定時(shí)/直接用ToString方法轉(zhuǎn)換日期顯示格式/用String類轉(zhuǎn)換日期顯示格式等等,感興趣的你了解下哦,或許對(duì)你學(xué)習(xí)時(shí)間格式化有所幫助2013-02-02.net?程序通過(guò)?crontab?無(wú)法啟動(dòng)手動(dòng)執(zhí)行腳本啟動(dòng)的方法
.net 網(wǎng)關(guān)程序需要設(shè)置定時(shí)重啟,按照日常操作先把正在運(yùn)行的 PID kill 掉后,再執(zhí)行啟動(dòng)服務(wù)。通過(guò)腳本無(wú)法啟動(dòng),試著把 .net 程序?qū)懗煞?wù)后,發(fā)現(xiàn)是可以正常重啟的,本文給大家介紹下.net 程序通過(guò) crontab 無(wú)法啟動(dòng)手動(dòng)執(zhí)行腳本啟動(dòng),感興趣的朋友一起看看吧2021-12-12ASP.NET?Core配置設(shè)置之Configuration包
這篇文章介紹了ASP.NET?Core配置設(shè)置之Configuration包,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07