最近項目要求添加一個給用戶發送消息的功能,就決定使用SignalR。翻到了以前學習SignalR的學習筆記,基本是官方文檔的簡版整理,便於快速閱覽和實現。
1. nuget添加signalr引用:
a. install-package Microsoft.AspNet.SignalR
b. silverlight安裝時startup中找不到IAppBuilder接口: Update-Package Owin -Reinstall
2. 新建hub集線器類
a. 添加調用客戶端方法,調用的js方法在運行時解析,signalr將方法名稱和參數值發送到客戶端。如果客戶端有與該名稱匹配的方法,則調用該方法,並把參數值傳遞給該方法。如果沒有找到匹配的方法,則不會報錯。方法名稱匹配不區分大小寫。
i. js使用駝峰命名方式:第一個字母小寫,調用服務端方法時會自動轉換成c#命名方式(第一個字母大寫)。指定集線器名稱時,應該與客戶端js調用方法名稱一致。
#########1)
#########2)
b. 可以定義多個集線器。與在單個類中定義所有集線器功能相比,多個集線器沒有性能差異。
c. 強類型集線器
i. 
d. 客戶端調用服務端方法與調用本地js方法相同,可以獲取復雜類型的json格式返回值。
e. 同步/異步方法
i. 
ii. 
iii. js:
############
f. 異步調用客戶端方法時,不會等待客戶端方法執行完成,會繼續執行下面的代碼:
i. 
g. 重載:如果要定義方法的重載,每個重載中的參數數必須不同。如果您通過指定不同的參數類型來區分重載,則Hub類將編譯,但是當客戶端嘗試調用其中一個重載時,SignalR服務將在運行時拋出異常。
h. 從集線器方法調用報告進度(SignalR 2.1版本)。要實現進度報告,IProgress
請為客戶端可以訪問的集線器方法定義一個參數:
i. 
i. 調用客戶端方法:
i. 
ii. 
iii. 不能從客戶端方法中獲取返回值,以下代碼不起作用:
#########1)
iv. 字符串變量作為方法名稱
#########1)
j. 獲取連接的客戶端:
i. 所有連接的客戶端
#########1)
ii. 只有主叫客戶端。
#########1)
iii. 所有客戶端,除了主叫客戶端。
#########1)
iv. 由連接ID標識的特定客戶端。
#########1)
v. 所有連接的客戶端,除了指定的客戶端,由連接ID標識。
#########1)
vi. 指定組中的所有連接的客戶端。
#########1)
vii. 指定組中的所有連接的客戶端,除了指定的客戶端,由連接ID標識。
#########1)
viii. 指定組中的所有連接的客戶端,除了主叫客戶端。
#########1)
ix. 由userId標識的特定用戶。
#########1)
#########2) 默認情況下,這是IPrincipal.Identity.Name,但是可以通過向全局主機注冊IUserIdProvider的實現來更改。
x. 連接ID列表中的所有客戶端和組。
#########1)
xi. 組列表。
#########1)
xii. 按用戶連接id。
#########1)
xiii. 用戶名列表(在SignalR 2.1中引入)。
#########1)
k. 獲取有關客戶端的信息
i. 主叫客戶端的連接ID。連接ID是由SignalR分配的GUID(您不能在自己的代碼中指定值)。每個連接都有一個連接ID,如果應用程序中有多個Hub,則所有Hub都使用相同的連接ID。
#########1)
ii. HTTP標頭數據。
#########1)
iii. 查詢字符串數據。
#########1)
iv. Cookies
#########1)
v. 用戶信息
#########
vi. 請求的HttpContext對象
#########1)
3. 創建owin啟動類
a. 
b. 添加路由,如果要將SignalR功能添加到ASP.NET MVC應用程序,請確保在其他路由之前添加SignalR路由。
i. 
ii. 指定URL的服務器代碼。默認情況下,客戶端用於連接到Hub的路由URL為“/ signalr”,該URL用於自動生成的JavaScript文件。
#########1)
#########2)
iii. 指定URL的JavaScript客戶端代碼(使用生成的代理)
#########1)
iv. 指定URL的JavaScript客戶端代碼(不帶生成的代理)
#########1)
v. 指定URL的.NET客戶端代碼
#########1)
c. 如何自定義Hubs管道。SignalR使您可以將自己的代碼注入Hub管道。以下示例顯示了一個自定義集線器管道模塊,用於記錄從客戶端接收的每個傳入方法調用和在客戶機上調用的傳出方法調用:
i. 
ii. 在Startup.cs文件中將模塊注冊到Hub管道中運行
#########1)