<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在 ASP.Net Core 中使用 SignalR

          共 3296字,需瀏覽 7分鐘

           ·

          2021-02-22 08:05


          SignalR for ASP.Net Core 是 SignalR 的浴火重生版,允許你在 ASP.Net Core 中實(shí)現(xiàn)實(shí)時通訊,這里的?實(shí)時?意味著雙方都能快速的感知對方發(fā)來的消息,比如:一旦 server 端有需要推送的內(nèi)容將會直接 push 到 client,這和原始的 http 單向請求有著本質(zhì)的區(qū)別。

          值得注意的是, ASP.Net Core 版的 SingalR 移除了老版的諸多功能,比如:

          • 自動重連機(jī)制
          • 消息處理機(jī)制
          • 單連接多hub

          不過無需擔(dān)心,新版的 SingalR 在健壯性和易用性上做了非常大的改進(jìn),總的來說,新版本已不兼容老版本,而且新的 SingalR 客戶端采用的是 TypeScript 。

          安裝 SingalR

          要想使用?SingalR,需要通過 nuget 引用?Microsoft.AspNetCore.SignalR?包,可以通過 Visual Studio 2019 的?NuGet package manager?可視化界面安裝 或者 通過?NuGet package manager?命令行工具輸入以下命令:


          Install-Package?Microsoft.AspNetCore.SignalR

          使用 SignalR broadcast

          現(xiàn)在我們一起實(shí)現(xiàn)一下如何在 ASP.Net Core 應(yīng)用程序中使用 SignalR 的廣播消息,那怎么做呢?創(chuàng)建一個自定義的?MessageHub?類并繼承類庫中的?Hub?基類,在 MessageHub 中定義一個 SendMessage 方法,該方法用于向所有已連接的客戶端發(fā)送消息,如下代碼所示:


          ????public?class?MessageHub?:?Hub
          ????{
          ????????public?async?Task?SendMessage(string?user,?string?message)
          ????????{
          ????????????await?Clients.All.SendAsync("ReceiveMessage",?user,?message);
          ????????}
          ????}

          配置 SignalR

          要想在 ASP.Net Core 中使用 SignalR,只需在?Startup.ConfigureServices()?中調(diào)用擴(kuò)展方法?AddSignalR()?將其注入到 ServiceCollection 中即可,如下代碼所示:


          ????public?class?Startup
          ????{
          ????????public?Startup(IConfiguration?configuration)
          ????????{
          ????????????Configuration?=?configuration;
          ????????}

          ????????public?IConfiguration?Configuration?{?get;?}

          ????????//?This?method?gets?called?by?the?runtime.?Use?this?method?to?add?services?to?the?container.
          ????????public?void?ConfigureServices(IServiceCollection?services)
          ????????{
          ????????????services.AddSignalR();
          ????????????services.AddControllersWithViews();
          ????????}
          ????}

          為了能夠啟用 MessageHub,需要在?Startup.Configure?方法中添加如下代碼:


          ????????public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env)
          ????????{
          ????????????app.UseEndpoints(endpoints?=>
          ????????????{
          ????????????????endpoints.MapControllerRoute(
          ????????????????????name:?"default",
          ????????????????????pattern:?"{controller=Home}/{action=Index}/{id?}");

          ????????????????endpoints.MapHub("/messagehub");
          ????????????});
          ????????}

          創(chuàng)建 SignalR client

          SignalR 的 client 是任意的,意味著它可以是 html, windowform, wpf,console 甚至是 java 程序,它們都可以消費(fèi) server 端發(fā)來的消息,接下來準(zhǔn)備創(chuàng)建一個 Console 程序嘗試一下,那如何做呢?需要在 client 端引用?Microsoft.AspNetCore.SignalR.Client?和?System.Text.Encodings.Web?兩個nuget包,如下代碼所示:


          ????class?Program
          ????{
          ????????static?async?Task?Main(string[]?args)
          ????????{
          ????????????HubConnection?connection?=?new?HubConnectionBuilder()
          ????????????????.WithUrl("http://localhost:55215/messagehub")
          ????????????????.Build();

          ????????????connection.On<string,?string>("ReceiveMessage",?(user,?message)?=>
          ????????????{
          ????????????????var?newMessage?=?$"{user}:?{message}";

          ????????????????Console.WriteLine(newMessage);
          ????????????});

          ????????????await?connection.StartAsync();

          ????????????await?connection.InvokeAsync("SendMessage",?"jack",?"hello,world");

          ????????????Console.ReadLine();
          ????????}
          ????}

          接下來就可以調(diào)試一下,分別啟動 server 和 client 端,如下圖所示:

          server

          client

          譯文鏈接:https://www.infoworld.com/article/3267165/how-to-use-signalr-in-aspnet-core.html



          往期精彩回顧




          【推薦】.NET Core開發(fā)實(shí)戰(zhàn)視頻課程?★★★

          .NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開篇及總體規(guī)劃

          【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

          .NET Core中的一個接口多種實(shí)現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了

          10個小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時任務(wù)管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度

          現(xiàn)身說法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點(diǎn)建議

          C#異步編程看這篇就夠了


          瀏覽 55
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  波多野结衣av一区二区全免费观看 | 黄色毛片在线免费观看 | 青娱乐自拍偷拍 | 免费视频91蜜桃 | 青青草成人在线视频免费 |