0

我正在使用 SignalR 将消息从 ASP.NET MVC 服务器推送到 Web 客户端。

我想在接受来自客户端的新连接时存储当前客户端的连接 ID,以便当我想向该特定客户端发送数据时,我可以从 Session 中检索其连接 ID 并向其发送消息。

但是,在 OnConnected 事件处理程序中,会话为空。因此,当我尝试将 connectionId 放入会话中时,我的代码会引发空引用异常。

这是代码片段。

using Microsoft.AspNet.SignalR;

namespace TestSignalR
{
    public class SignalRServerListener : PersistentConnection
    {
        protected override System.Threading.Tasks.Task OnConnected(
                                          IRequest request, 
                                          string connectionId)
        {
            System.Diagnostics.Debugger.Break();

            System.Diagnostics.Debug.
             Print("Connection request received and accepted from 
             client with connection Id {0}", connectionId);

            HttpContext.Current.Session["connectionId"] = connectionId;

            return base.OnConnected(request, connectionId);
        }
    }
}
4

1 回答 1

1

您可以像下面这样跟踪客户

class MyConnections
{
    private static List<String> _MyClients = new List<String>();

    public override Task OnConnected()
    {
        _MyClients.Add(Context.ConnectionId);
        return base.OnConnected();
    }

    public override Task OnDisconnected()
    {
        _MyClients.Remove(Context.ConnectionId);
        return base.OnDisconnected();
    }

    public static bool IsConnected(string cid)
    {
        return _MyClients.Contains(cid);
    }
}

现在,当服务器想要向其中一个客户端发送数据时,服务器应该如何知道在 Context.Connection.Send(connectionId, message) 中应该使用哪个连接 ID?

Context.DefaultSignal
于 2013-05-28T17:27:54.163 回答