我使用SignalR将消息从ASP.NET MVC服务器推送到Web客户端。
我希望在接受来自客户端的新连接时存储当前客户端的连接ID,这样当我想将数据发送到此特定客户端时,我可以从会话中检索其连接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);
}
}
}
答案 0 :(得分: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);
}
}
现在,当服务器想要将数据发送到其中一个客户端时,如何 服务器应该知道应该使用哪个连接ID Context.Connection.Send(connectionId,message)?
Context.DefaultSignal