我希望能夠讓各個用戶使用SignalR互相發送消息,因此我需要發送到特定的客戶端ID。我如何在會話開始時爲特定用戶定義客戶端ID - 說出用戶的GUID主鍵?SignalR - 手動設置ClientID
回答
用您自己的https://github.com/SignalR/SignalR/wiki/Extensibility替換IConnectionIdFactory。
使用範例: http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/
編輯:這不再SignalR的最新版本支持。但是,你可以定義一個用戶ID使用新IUserIdProvider的特定連接
的SignalR Client Side documentation概述如下:
connection.id - 獲取或設置客戶端ID爲當前連接
這當然表明應該能夠設置clientID客戶端,沒有所有上述管道。這不工作?如果工作,這行代碼將如何?
我還沒有嘗試過,但我需要能夠將連接ID分配給服務器已知的某些內容,例如GUID(用戶ID),因此IConnectionFactory解決方案對我來說最適合。 – reach4thelasers 2012-04-24 13:38:29
+1雖然提高它 – reach4thelasers 2012-04-24 13:38:48
在使用集線器方法的SignalR版本1中,我重寫了Hub OnConnected()方法,並將.NET成員資格userId與當前連接標識(Context.ConnectionId)關聯保存在SQL數據庫中。
然後我重寫Hub OnDisconnected()方法並刪除.NET成員資格userId和當前連接ID之間的關聯。這意味着在頁面上重新加載userId/connectionId關聯將是最新的。
東西線沿線的:
public class MyHub : Hub
{
private MembershipUser _user
{
get { return Membership.GetUser(); }
}
private Guid _userId
{
get { return (Guid) _user.ProviderUserKey; }
}
private Guid _connectionId
{
get { return Guid.Parse(Context.ConnectionId); }
}
public override Task OnConnected()
{
var userConnectionRepository = new UserConnectionRepository();
userConnectionRepository.Create(_userId, _connectionId);
userConnectionRepository.Submit();
return base.OnConnected();
}
public override Task OnDisconnected()
{
var userConnectionRepository = new UserConnectionRepository();
userConnectionRepository.Delete(_userId, _connectionId);
userConnectionRepository.Submit();
return base.OnDisconnected();
}
}
然後,當我需要觸發特定用戶SignalR事件,我可以從數據庫協會(S)與當前的用戶id制定出的ConnectionId - 有如果涉及多個瀏覽器實例,則可能會多於一個關聯。
你有這樣的例子嗎? – CR41G14 2013-03-11 09:31:41
我已經用示例更新了我的答案 – 2013-03-11 11:59:59
- 1. 手動安裝谷歌登錄iso sdk終止應用程序設置clientID
- 2. Phonegap/SignalR - 設置document.cookie
- 3. 手動設置AlternateItemTemplate
- 4. 手動設置models.DateTimeField
- 5. 手動設置UUID
- 6. 手動設置ID
- 7. 手動設置livewallpaper
- 8. 手動設置IIdentity
- 9. 手動設置event.target
- 10. 手動設置Airplay?
- 11. 手動設置r_creation_date?
- 12. 手動設置DJANGO_SETTINGS_VARIABLE
- 13. 在C中設置ClientID爲靜態#
- 14. 手動設置gtk的限制。設置
- 15. 我可以設置動態生成控件的期望ClientID
- 16. 將動態clientID設置爲使用javascript回收值
- 17. BlazeDS手動設置Cookie
- 18. Android Camera2手動設置
- 19. 如何手動設置NSManagedObjectID?
- 20. Javascript手動設置URL
- 21. 動態設置手把類
- 22. 手動設置ID,學說
- 23. 手動設置測試頭
- 24. 手動設置ID 2
- 25. JPA GenerationType.AUTO和設置手動
- 26. 如何手動設置UITableViewCell?
- 27. 手動設置UINavigationController兒童
- 28. 手動設置UI語言?
- 29. 手動設置指針值
- 30. 如何設置titleForHeaderInSection手動
非常好 - 感謝您的回覆和博客鏈接! – reach4thelasers 2012-03-08 09:39:31
有沒有辦法在不使用cookies的情況下手動設置客戶端ID?也許是start()方法的一個參數,或者是將信息傳遞給自定義連接工廠中的請求對象的另一種方法? – 2012-03-08 15:48:25
感謝您鏈接到我的博客! – 1kevgriff 2012-03-08 16:30:19