(此文章同時發表在本人微信公眾號“dotNET每日精華文章”,歡迎右邊二維碼來關注。)
題記:SignalR作為ASP.NET中進行Web實時雙向通信的組件,在ASP.NET 5中也得到了同步發展。不過,用法和之前還是在細節上有所不同,而資料又相對稀少。本文就是一個簡單的入門向導。
通過SignalR,開發人員可以在ASP.NET開發的Web應用中實現服務器和客戶端的雙向實時通信。服務器可以即時推送內容給在線的客戶端。SignalR首選Web Sockets作為底層實現,針對非現代瀏覽器也可以回退到其他兼容技術。它的特性很豐富,支持鏈接管理、分組連接和授權控制等。
在ASP.NET 5時代,SignalR也同步升級到SignalR 3.x,不過Javascript的客戶端庫還是2.x版本。同時,用法和之前在ASP.NET 4.x時代(比如在ASP.NET MVC 5中)還是有點細微的區別,所以導致參考現有文檔可能會遇到錯誤。那么如何在ASP.NET 5的Web應用中使用SignalR 3呢,下面就簡單講解一下步驟:
1,不用說,一開始就是新建一個ASP.NET 5的Web應用程序項目
2,新建成功后。在Solution Explorer中打開“project.json”文件,在“dependencies”中添加"Microsoft.AspNet.SignalR.Server": "3.0.0-rc1-final",以便引用SignalR的服務端函數庫
3,展開“Dependencies”,右擊“Bower”節點,選擇“Manage Bower Packages…”選項,在Bower包安裝界面,切換到“Browse”,搜索“SignalR”並安裝。需要注意的是,本文書寫的時候只能安裝signalr 2.2.0的js函數庫,但是不影響使用。
4,創建一個文件夾(比如名為”Hubs“)來包含所有Hub類,建議規范如此,並非強制要求。在Hubs文件夾中添加一個名為ChatHub的類,並繼承Microsoft.AspNet.SignalR.Hub。
5,理論上,如果你只打算從服務端往客戶端推送消息的話,Hub類里面可以不寫任何東西。不過為了實現一個簡單的聊天功能,我們還是寫點東西,寫了兩個方法Send和Join供客戶端調用。代碼如下:
public class ChatHub : Hub { public void Send(string message) { var name = Context.Request.HttpContext.Session.GetString("name"); Clients.All.addNewMessageToPage(name, message); } public void Join(string name) { Context.Request.HttpContext.Session.SetString("name", name); } }
6,然后在Startup.cs文件中,的”ConfigureServices“中添加2行代碼services.AddSignalR();services.AddTransient<ChatHub>();。(第二行代碼的目的是后續在Hub外部調用客戶端方法的時候,可以方便的進行依賴注入。)接着在”Configure“中添加1行代碼app.UseSignalR();
7,在視圖文件中實現加入、發送消息、顯示消息的界面,代碼基本參考了(http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc)中的。我添加了加入聊天的功能。另外,引用自動生成的hub代理js文件的地址由”signalr/hubs“變為了”signalr/js“。這個地址,可以在Startup中配置,不過默認值是這個且和之前不同。
8,要從Hub中發送消息到客戶端,需要在服務端的代碼中通過依賴注入引用IHubContext<ChatHub>,並直接調用dynamic方法。代碼如下:
private readonly IHubContext<ChatHub> _hub; public HomeController(IHubContext<ChatHub> hub) { _hub = hub; } public IActionResult SendMessageToClients(string message) { _hub.Clients.All.sendMessageFromServer(message); return Content("<h1>OK</h1>"); }
完整的項目代碼共享地址在:https://zyg.blob.core.windows.net/share/ASP.NET%205%20SignalR.zip