Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单声道组上的信号器。添加未在未连接状态下工作_C#_Asp.net Mvc 3_Mono_Signalr_Signalr Hub - Fatal编程技术网

C# 单声道组上的信号器。添加未在未连接状态下工作

C# 单声道组上的信号器。添加未在未连接状态下工作,c#,asp.net-mvc-3,mono,signalr,signalr-hub,C#,Asp.net Mvc 3,Mono,Signalr,Signalr Hub,我在mono上的MVC3中运行信号器时遇到问题 我创建了以下中心: public class TestHub : Hub { public override Task OnConnected() { Trace.WriteLine(String.Format("Join Group: {0}", Context.User.Identity.Name), "SignalR.General"); Task addTask = Group

我在mono上的MVC3中运行信号器时遇到问题

我创建了以下中心:

public class TestHub : Hub { public override Task OnConnected() { Trace.WriteLine(String.Format("Join Group: {0}", Context.User.Identity.Name), "SignalR.General"); Task addTask = Groups.Add(Context.ConnectionId, Context.User.Identity.Name); return addTask; } public void JoinGroup(String group) { Trace.WriteLine(String.Format("Join Group2: {0}", Context.User.Identity.Name), "SignalR.General"); Groups.Add(Context.ConnectionId, group); } public void Echo(String group, String value) { Trace.WriteLine(String.Format("Echo: {0}, {1}", group, value), "SignalR.General"); Clients.Group(group).echo(value); } } 公共类TestHub:Hub { 已连接的公用覆盖任务() { WriteLine(String.Format(“连接组:{0}”、Context.User.Identity.Name)、“signer.General”); Task addTask=Groups.Add(Context.ConnectionId、Context.User.Identity.Name); 返回addTask; } 公共组(字符串组) { WriteLine(String.Format(“joingroup2:{0}”、Context.User.Identity.Name)、“signer.General”); Groups.Add(Context.ConnectionId,group); } 公共空回显(字符串组、字符串值) { WriteLine(String.Format(“Echo:{0},{1}”,组,值),“signal.General”); Clients.Group(Group).echo(value); } } 主要问题如下:

用户通过表单身份验证登录,并且在Context.user.Identity.name中可以正确找到其名称。 当客户端连接时,将调用OnConnected,并将连接添加到与用户名同名的单个用户组中。 当我以用户名作为组名从客户端调用Echo函数时,如果我在IIS中托管,则得到正确的响应(响应发送到客户端),但在mono中托管时,没有响应

另一方面,如果我首先从客户机调用JoinGroup,它在IIS和Apache mono上工作。 向客户端发送消息。所有这些都可以在IIS和mono中使用,但我需要消息只针对特定用户

我尝试了这段代码的不同变体,但不知道为什么组注册不应该在OnConnected中工作


我已经在这个问题上浪费了2天的时间,如果有任何想法都将不胜感激。

我对这个问题进行了更深入的研究,并找到了这个根本原因:

当客户端连接时,它会首先尝试使用服务器发送的事件进行连接。此连接似乎正常工作,并由服务器接收,触发OnConnected并将组id正确返回给客户端。 但由于某些原因,在apache2和mono上运行时,从未收到此响应,EventSource对象的“open”事件也不会触发。这意味着,在3秒钟后,信号器在客户端上超时该连接请求,并假设SSE不工作,并启动长轮询会话

此会话连接成功,可以发送和接收数据,但连接id已发送到服务器,并且OnConnect未再次启动,因此我的集线器无法获得第二次连接尝试,客户端将无法获得组id


通过$.connection.hub.start({transport:“longPolling”})直接使用longPolling启动客户机,以仅使用longPolling为代价解决了此问题。

我无法解决此问题,因此我使用了内存中的连接存储,如下所述: