之外如何獲得客戶的ConnectionId /的clientId集線器之外。我已經成功地做到以下幾點:獲取的ConnectionId樞紐,SignalR
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
但在這種情況下,物體是沒有例如clientId
。
之外如何獲得客戶的ConnectionId /的clientId集線器之外。我已經成功地做到以下幾點:獲取的ConnectionId樞紐,SignalR
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
但在這種情況下,物體是沒有例如clientId
。
您可以實現在集線器IConnected/IDisconnect和手動跟蹤客戶例如在數據庫中,然後在需要的時候拉了回來列表。下面的例子是從SignalR Wiki
public class Status : Hub, IDisconnect, IConnected
{
public Task Disconnect()
{
return Clients.leave(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Connect()
{
return Clients.joined(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Reconnect(IEnumerable<string> groups)
{
return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString());
}
}
爲什麼在全局上下文中會有一個連接ID?它將涉及哪個連接?獲取全局上下文時,您正在訪問從服務器到客戶端的單向通道,並可以通過它發送消息。您沒有訪問集線器的連接ID,因爲您沒有調用它。如果您需要使用它們,您可以將它們存儲在應用程序的某個位置。
這裏的解決方案。 可以調用hub
內的方法,你可以從那裏返回connection ID
。
在控制器
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
MyHub _connectedHub= new MyHub();
var connectedUserID = _connectedHub.GetConnectionID();
在集線器
public string GetConnectionID()
{
return "Your Connection ID as String" //This can be stored in a list or retrieved in any other method
}
你會得到所需要的樞紐外ID在connectedUserID
變量。 希望這有助於。
不是每個人都建立聊天服務器。我認爲暗示是如何使當前客戶端這樣的消息可以被髮送到僅僅是用戶/會話使用的ConnectionId。我想知道如何在一個MVC Action中從我希望發送進度消息的客戶端獲得最佳效果。有一些技術可以通過用戶名緩存ConnectionId,但是我還沒有看到允許同一用戶有多個連接的情況,這對於Web應用來說通常是這種情況。想法呢?謝謝。 – Dave
您從客戶端發送到你的MVC行動。它可以通過$ .connection.hub.id在客戶端上獲得。 – davidfowl