目錄
<a href="http://www.cnblogs.com/GuZhenYin/p/4744693.html">SignalR系列目錄</a>
前言
老規矩,前言~,在此先道個歉,之前的1-5對很多細節問題都講的不是很詳細,也有很多人在QQ或者部落格問我一些問題
是以,特開了這個續集.. - -, 講一些大家在開發中遇到的問題和一些解決方案,今天就來說說經常被問到的,如何使用自己定義的連接配接ID.
之前我們說過,Signalr提供了唯一的連接配接ID 擷取方法:Context.ConnectionId,
那麼怎麼自己定義這個東西呢? (廢話一堆 - - ,),進入主題:
首先,其實在Signalr的前期版本是可以直接自定義Context.ConnectionId,
使用老版本的可以自行檢視<code>IConnectionIdGenerator, </code><code>IConnectionIdFactory 這兩個接口.</code>
是以特意說明一下,本部落格這裡的代碼,隻适用于Signalr2.0以上版本
代碼環境
開發工具:VS2013 資料庫:SQL2008 R2 SignalR版本:2.2
正文開始
其實在2.0的版本中,SignalR團隊為了安全性,已經完全去除了自定義Context.ConnectionId的接口,但是相應的開放了相對安全的IUserIdProvider
廢話不多說,直接上代碼:
首先帳戶登陸的代碼:
其實就是很傳統的登陸代碼..把一些使用者資訊寫入到Cookie中而已.黃色為重點
接下來實作IUserIdProvider:
以上代碼是建立一個MyUserFactory類,繼承自IUserIdProvider,實作IUserIdProvider的抽象方法GetUserId
這裡的ID我們從Cookies中擷取,細心的人應該已經發現了,有個IRequest的參數,是以原則上你可以使用IRequest的各種屬性比如QS..你随意..(注:Session暫時無法使用,原因未知)
接下來,重點來了..
在Starup中,把我們自定義的MyUserFactory注入到回話設定中..
代碼如下(黃色為重點):
接下來在Hub中添加代碼如下:
說明:重點是标黃色的地方,看過我之前文章的都知道,之前我們的對指定連接配接對象發送資料,寫法為: Clients.Client("連接配接ID").用戶端方法,
這裡我們換成了Clients.User("自定義ID"),這樣就完成了整個使用自己的連接配接ID的替換工作.
寫在最後
SignalR确實是一個很好用的東西,無奈國内資料确實很少,有問題可以向我回報,我會盡量在國外的站上找相關的資料整理成部落格,希望SignalR發展的越來越好!