2012-11-24 65 views
2

我想能夠發送消息到特定的客戶端,我有工作代碼,但我無法找到一種方法來識別用戶,因爲在每個頁面加載/刷新客戶端ID會改變,所以我不能依靠那個。 我試圖追加一個查詢字符串到連接,但我只能找到相同的上下文的查詢字符串。SignalR 1.0 - 發送數據到一個特定的客戶端

這是我的樞紐,發送方法中我希望能夠以匹配在發送消息的點發送到特定連接ID的ID:

public class Chat : Hub 
{ 
    public string addMsg() 
    { 
     return ""; 
    } 

    public void Send(string message, string id) 
    { 

     Clients.Client(Context.ConnectionId).receiveMessage(message); 
    } 
} 

這裏是我的客戶端代碼,我想通過發送消息的人的ID到服務器發送方法,並使用其他連接的用戶的查詢字符串值匹配它到我發送的ID。

var chat = $.connection.chat; 

chat.client.receiveMessage = function (message) { 
    alert("Received from server: " + message); 
}; 

chat.addMsg = function (message) { 

}; 

$("#sendMessage").click(function() { 
    chat.server.send($('#newMessage').val(), 6); 
}); 

$.connection.hub.qs = "id=1"; 

$.connection.hub.start().done(function() { 
    var myClientId = $.connection.hub.id; 
    var qs = $.connection.hub.qs; 
}); 

我希望我的問題是有道理的,我一直在努力,現在破解這一段時間,下面是一些鏈接到一些我已經習慣了到現在我在文章中,我只是缺少拼圖的最後一塊,請去容易對我:)

http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

SignalR- send data to a specific client

https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

回答

3

我不認爲這會按照你想要的方式工作。連接ID就是這個 - 特定連接的標識符。 SignalR本身並不知道任何有關驗證用戶的信息。不過,它是建立在ASP.NET之上的,並且所有您熟悉的身份驗證方法(Windows,Forms等)都可以像您期望的那樣工作。

一旦ASP.NET對用戶進行了身份驗證,您就可以在您的集線器中以Context.User的身份訪問它。現在由您來維護此用戶與一個或多個連接ID之間的映射。除了瀏覽器刷新之外,您可能還需要處理從多個瀏覽器或計算機訪問您的服務的用戶。向該用戶發送消息意味着將其發送給所有這些瀏覽器和機器。

Jabbr可以做到所有這些以及更多。你真的應該看看這個代碼,以實現這個好方法。

+0

好吧,謝謝你,我懷疑可能是這種情況。 – stickleback14

0

如何使用Clients.Caller對象詮釋他的樞紐,並重寫OnConnected方法:

public override Task OnConnected() 
{ 
    Clients.Caller.sendInitMessage(...); 
    return base.OnConnected(); 
} 
相關問題