在ASP.NET 5中使用SignalR


(此文章同時發表在本人微信公眾號“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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM