SignalR 2 入門

来源:https://www.cnblogs.com/net-yuan/archive/2018/12/17/SignalR-Start.html
-Advertisement-
Play Games

在本教程中使用的軟體版本 Visual Studio 2015 .NET 4.5 SignalR 版本 2 概述 本教程介紹了通過演示如何生成簡單的基於瀏覽器的聊天應用程式的 SignalR 開發。 將 SignalR 庫添加到空的 ASP.NET web 應用程式,創建一個中心類,用於將消息發送到 ...


在本教程中使用的軟體版本

  • Visual Studio 2015
  • .NET 4.5
  • SignalR 版本 2

概述

本教程介紹了通過演示如何生成簡單的基於瀏覽器的聊天應用程式的 SignalR 開發。 將 SignalR 庫添加到空的 ASP.NET web 應用程式,創建一個中心類,用於將消息發送到客戶端,並創建使用戶能夠發送和接收聊天消息的 HTML 頁。 有關演示如何在 MVC 5 中創建的聊天應用程式使用 MVC 視圖的類似教程,請參閱SignalR 2 和 MVC 5 入門。

SignalR 是構建 web 應用程式的需要實時用戶交互或實時數據更新的開放源.NET 庫。 示例包括社交應用程式、 多用戶游戲、 業務協作和新聞、 天氣或財務更新應用程式。 這些測試通常稱為實時應用程式。
SignalR 簡化了構建實時應用程式的過程。 它包括 ASP.NET 伺服器庫和 JavaScript 客戶端庫來輕鬆地管理客戶端-伺服器連接,並將內容更新推送到客戶端。 您可以將 SignalR 庫添加到現有 ASP.NET 應用程式以獲取實時功能。
本教程演示以下的 SignalR 開發任務:

  • SignalR 庫添加到 ASP.NET web 應用程式。
  • 創建用於將內容推送到客戶端的中心類。
  • 創建配置應用程式的 OWIN 啟動類。
  • 使用 SignalR jQuery 庫在網頁上發送消息並顯示從中心的更新。
    以下屏幕截圖顯示在瀏覽器中運行的聊天應用程式。 每個新用戶可以發表評論,並查看用戶加入聊天後已添加註釋。
    聊天實例

設置項目

本部分演示如何使用 Visual Studio 2013 和 SignalR 版本 2 創建空的 ASP.NET web 應用程式,將 SignalR 中,並創建聊天應用程式。
先決條件:

  • Visual Studio 2013+
    以下步驟使用 Visual Studio 2015 創建 ASP.NET 空 Web 應用程式並添加 SignalR 庫:
  1. 在 Visual Studio 中創建 ASP.NET Web 應用程式。
  2. 在中新建 ASP.NET 項目視窗中,保留空選中然後單擊創建項目。

  3. 在中解決方案資源管理器,右鍵單擊項目,選擇添加 |SignalR Hub 類 (v2)。 將類命名ChatHub.cs並將其添加到項目。 此步驟將創建ChatHub類,並將一組腳本文件和支持 SignalR 的程式集引用添加到項目。

您還可以將 SignalR 通過打開添加到項目工具 > NuGet 包管理器 > 程式包管理器控制台並運行命令:

install-package Microsoft.AspNet.SignalR

如果使用控制台來添加 SignalR,SignalR hub 類作為單獨的步驟後創建將 SignalR 添加。

如果使用 Visual Studio 2012 中, SignalR Hub 類 (v2) 模板將不可用。 您可以添加純類調用ChatHub相反。
在中解決方案資源管理器,展開腳本節點。 適用於 jQuery 和 SignalR 的腳本庫將顯示在該項目。
在新的代碼替換為ChatHub用下麵的代碼的類。

using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
}
}
}
  1. 在中解決方案資源管理器,展開腳本節點。 適用於 jQuery 和 SignalR 的腳本庫將顯示在該項目。
  2. 在新的代碼替換為ChatHub用下麵的代碼的類。
    using Microsoft.Owin;
    using Owin;
    [assembly: OwinStartup(typeof(SignalRChat.Startup))]
    namespace SignalRChat
    {
    public class Startup
    {
    public void Configuration(IAppBuilder app)
    {
    // Any connection or hub wire up and configuration should go here
    app.MapSignalR();
    }
    }
    }
  3. 在中解決方案資源管理器,右鍵單擊項目,然後單擊添加 |OWIN 啟動類。 新類命名為Startup並單擊確定。
    備註

  4. 如果使用 Visual Studio 2012 中, OWIN 啟動類模板將不可用。 您可以添加純類調用Startup相反。
    將新的啟動類的內容更改為以下。

    using Microsoft.Owin;
    using Owin;
    [assembly: OwinStartup(typeof(SignalRChat.Startup))]
    namespace SignalRChat
    {
    public class Startup
    {
    public void Configuration(IAppBuilder app)
    {
    // Any connection or hub wire up and configuration should go here
    app.MapSignalR();
    }
    }
    }
  5. 在中解決方案資源管理器,右鍵單擊項目,然後單擊添加 |HTML 頁。 命名新頁面index.html。

備註:可能需要更改對 JQuery 和 SignalR 庫的引用的版本號


  1. 在中解決方案資源管理器,右鍵單擊剛創建的 HTML 頁,然後單擊設為起始頁。
    HTML 頁中的預設代碼替換為以下代碼。

備註:可能通過程式包管理器安裝 SignalR 腳本的更高版本。 驗證以下腳本參考對應於版本的腳本文件在項目中 (它們將與此不同如果添加了使用 NuGet,而不是添加 hub 的 SignalR。)


<!DOCTYPE html>
<html>
<head>
<title>SignalR Simple Chat</title>
<style type="text/css">
.container {
background-color: #99CCFF;
border: thick solid #808080;
padding: 20px;
margin: 20px;
}
</style>
</head>
<body>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion">
</ul>
</div>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-3.1.1.min.js" ></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.2.1.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
</script>
</body>
</html>

保存所有項目。

運行示例

按 F5 以在調試模式下運行該項目。 中的瀏覽器實例並提示輸入用戶名稱的 HTML 頁面載入。

  1. 輸入用戶名;輸入用戶名稱。
  2. 從地址行中的瀏覽器複製 URL 並將其用於打開兩個更多的瀏覽器實例。 在每個瀏覽器實例中,輸入唯一的用戶名稱。
    在每個瀏覽器實例中,添加註釋並單擊發送。 註釋應顯示在瀏覽器的所有實例。

下麵的屏幕截圖顯示了在三個瀏覽器情況下,所有這些更新一個實例發送消息時運行的聊天應用程式:

  1. 在中解決方案資源管理器,檢查腳本文檔節點運行的應用程式。 沒有名為的腳本文件中心在運行時動態生成 SignalR 庫。 此文件管理的 jQuery 腳本和伺服器端代碼之間的通信。

檢查代碼檢查代碼

SignalR 聊天應用程式演示了兩個基本的 SignalR 開發任務: 在伺服器上的主要協調對象為創建中心和使用 SignalR jQuery 庫來發送和接收消息。
SignalR 集線器
中的代碼示例ChatHub類派生自Microsoft.AspNet.SignalR.Hub類。 派生自中心類是一種有用的方式來構建 SignalR 應用程式。 可以在中心類上創建的公共方法,然後通過調用從網頁中的腳本中訪問這些方法。
在聊天代碼中,客戶端調用ChatHub.Send方法發送一封新郵件。 在中心反過來將消息發送給所有客戶端,通過調用Clients.All.broadcastMessage。
發送方法演示了多個中心概念:
集線器上聲明的公共方法,以便客戶端可以調用它們。
使用Microsoft.AspNet.SignalR.Hub.Clients動態屬性來訪問所有客戶端連接到此中心。
在客戶端上調用的函數 (如broadcastMessage函數) 來更新客戶端。

public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
}
}

SignalR 和 jQuery

HTML 頁中的代碼示例演示如何使用 SignalR jQuery 庫與 SignalR 中心進行通信。 在代碼中的基本任務聲明的代理伺服器能夠引用中心,聲明伺服器可以將內容推送到客戶端,調用的函數和啟動的連接將消息發送到中心。
下麵的代碼聲明對集線器代理的引用。

var chat = $.connection.chatHub;

下麵的代碼是如何在腳本中創建一個回調函數。 在伺服器上的中心類會調用此函數可將內容更新推送到每個客戶端。 HTML 顯示前先編碼內容的兩行都是可選的並顯示簡單的方法來阻止腳本註入。

chat.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
};

下麵的代碼演示如何在中心打開的連接。 代碼啟動連接,然後將其傳遞函數來處理單擊事件上發送HTML 頁中的按鈕。

$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});

GitHub:https://github.com/net-yuan-Moo/SignalR

原文鏈接:https://docs.microsoft.com/zh-cn/aspnet/signalr/overview/getting-started/tutorial-getting-started-with-signalr

http://net-yuan.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題意 一天做到兩道這種題目描述如此神仙的題也是夠了。真鍛煉語文能力。 題目的意思其實就是,給你一個序列,然後每次詢問一個區間。使得儘量 ...
  • 前言 感謝! 承蒙關照~ 中的 簡介筆記 簡介 1. 基本概念 2. 項目搭建 使用 進行開發 實現數據綁定和文件上傳 是開發 架構的通用方式. 前端控制器, 到`Controller View template`,用戶頁面. 前端控制器 前端控制器用於分發調度,而控制器用於業務數據抽取, 用於頁面 ...
  • #####認證組件##### 一、認證是什麼就不說了,某些網頁必須是用戶登陸之後,才能訪問的,所以這時候就需要用上認證組件。 你不用rest_framework的認證組件也行,這種認證的話,完全可以自己寫出來。 二、之前再寫APIView的時候,那裡提到過。 不記得在哪裡的話,先找dispatch方... ...
  • JAVA裝箱和拆箱 從Java SE5開始就提供了自動裝箱的特性,如果要生成一個數值為10的Integer對象,只需要這樣就可以了。原文鏈接: http://www.cnblogs.com/dolphin0520/p/3780005.htmlInteger i = 10; //裝箱int n = i ...
  • org.eclipse.jetty.webapp 包下的 StandardDescriptorProcessor類。該類對象會在WebAppContext的doStart方法啟用 註冊了遍歷web.xml中的元素中的方法,後續會用反射機制來調用這些方法。比如filter元素用visitFilter處 ...
  • 與Asp.Net Mvc創建區域的時候會自動為你創建區域路由方式不同的是,Asp.Net Core下需要自己手動做一些配置,但更靈活了 ...
  • 前言 這兩天群里一直有群友問一些關於FastReport的問題,結合他們的問題,在這裡做一個整理,有不明白的可以加 FastReport 交流群 群 號:554714044 工具 VS2017 +FastReport 開始 1.新建項目,添加三個按鈕。預覽、設計、列印 2.添加FastReport ...
  • 一、背景 IdentityServer4的介紹將不再敘述,百度下可以找到,且官網的快速入門例子也有翻譯的版本。然而發現關於它應用方面的文章介紹稍微欠缺,所以這裡主要從Client應用場景方面介紹對IdentityServer4的應用。 首先簡要介紹ID Token和Access Token: Acc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...