我在单声道的 MVC3 中运行 SignalR 时遇到问题。
我创建了以下集线器:
公共类 TestHub : 集线器 { 公共覆盖任务 OnConnected() { Trace.WriteLine(String.Format("加入组:{0}", Context.User.Identity.Name), "SignalR.General"); 任务 addTask = Groups.Add(Context.ConnectionId, Context.User.Identity.Name); 返回添加任务; } 公共无效加入组(字符串组) { Trace.WriteLine(String.Format("加入 Group2: {0}", Context.User.Identity.Name), "SignalR.General"); Groups.Add(Context.ConnectionId, group); } 公共无效回声(字符串组,字符串值) { Trace.WriteLine(String.Format("Echo: {0}, {1}", group, value), "SignalR.General"); Clients.Group(group).echo(value); } }
主要问题如下:
用户通过 Forms auth 登录,并且他们的姓名在 Context.User.Identity.Name 中正确找到。当客户端连接时,将调用 OnConnected 并将连接添加到与用户名同名的单个用户组中。当我以组名作为用户名从客户端调用 Echo 函数时,如果我在 IIS 中托管但在 mono 中托管时没有响应,我会得到正确的响应(响应发送到客户端) 。
另一方面,如果我首先从客户端调用 JoinGroup,它可以在 IIS 和 Apache 上运行。向 Clients.All 发送消息也适用于 IIS 和单声道,但我需要消息仅针对特定用户到达。
我尝试了此代码的不同变体,但不知道为什么组注册不应该在 OnConnected 中工作。
任何想法都将不胜感激,因为我已经在这个问题上浪费了 2 天时间。