ASP.NET MVC 迅速集成 SignalR的過程
在現(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ù)和模型來存儲(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 來處理客戶端連接和數(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ù)并通過 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è)面來顯示實(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ù)。
- 打開瀏覽器,訪問你的應(yīng)用程序,應(yīng)該可以看到實(shí)時(shí)更新的溫濕度數(shù)據(jù)。
通過以上步驟,你已經(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 Core Project.json文件(5)
這篇文章主要為大家詳細(xì)介紹了ASP.NET Core Project.json文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
asp.net基于Web Service實(shí)現(xiàn)遠(yuǎn)程上傳圖片的方法
這篇文章主要介紹了asp.net基于Web Service實(shí)現(xiàn)遠(yuǎn)程上傳圖片的方法,涉及asp.net調(diào)用Web Service的文件流操作與文件傳輸實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
3分鐘快速學(xué)會(huì)在ASP.NET Core MVC中如何使用Cookie
這篇文章主要給大家介紹了關(guān)于如何通過3分鐘快速學(xué)會(huì)在ASP.NET Core MVC中使用Cookie的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Entity?Framework?Core生成數(shù)據(jù)庫(kù)表
這篇文章介紹了Entity?Framework?Core生成數(shù)據(jù)庫(kù)表的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
Asp.net Core 如何設(shè)置黑白名單(路由限制)
本文主要介紹了Asp.net Core 如何設(shè)置黑白名單(路由限制),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
在.NET標(biāo)準(zhǔn)庫(kù)中進(jìn)行數(shù)據(jù)驗(yàn)證的方法
.NET標(biāo)準(zhǔn)庫(kù)提供了多種數(shù)據(jù)驗(yàn)證機(jī)制,從基礎(chǔ)的類型檢查到復(fù)雜的業(yè)務(wù)規(guī)則驗(yàn)證,都能滿足不同場(chǎng)景的需求,本文將深入探討.NET標(biāo)準(zhǔn)庫(kù)中的數(shù)據(jù)驗(yàn)證技術(shù),幫助開發(fā)者構(gòu)建更可靠的應(yīng)用程序,感興趣的朋友一起看看吧2025-07-07
.NET Framework攔截HTTP請(qǐng)求的實(shí)現(xiàn)
本文主要介紹了.NET Framework攔截HTTP請(qǐng)求的實(shí)現(xiàn),主要用于記錄 HTTP 信息,調(diào)試程序、分析程序性能等方面,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
asp.net使用FCK編輯器中的分頁(yè)符實(shí)現(xiàn)長(zhǎng)文章分頁(yè)功能
這篇文章主要介紹了asp.net使用FCK編輯器中的分頁(yè)符實(shí)現(xiàn)長(zhǎng)文章分頁(yè)功能,涉及asp.net字符串及分頁(yè)操作的相關(guān)技巧,需要的朋友可以參考下2016-06-06

