虽然正确的客户端绑定,但在部署OnConnected时未触发

问题描述:

我已经搜遍了该网站,遇到了SignalR OnConnected and OnDisconnected not firing以及类似问题,但该解决方案不适用于我的情况。我已经做已注册客户端方法。虽然正确的客户端绑定,但在部署OnConnected时未触发

此外,我的集线器的OnConnected方法在我的本地盒子上运行时弹出。它只是在部署时触发而不是。但是,其他所有方法都可以正常工作就目前来说,我创建了一个变通这样:

<script> 
    $(function() { 
     var myHub = $.connection.myHub; 
     myHub.client.clientMessage = function (message) { alert(message); }; 

     // Start the connection. 
     $.connection.hub.start().done(function() { 
      myHub.server.superfluousMethodToDoSameThingInOnConnect(); 
     }); 
    }); 
</script> 

我真的很想但停止使用该第二个电话,和只需OnConnected正常工作,因为它应该。我的部署服务器上有必要使其工作相同吗?

作为参考,我的SignalR版本1.2.2(限于.NET 4.0,现在)并入MVC站点(没有错误,否则)。 我的开发框是在IIS Express 8.5中托管的Windows 7 部署框是在IIS V6.0中托管的Winows Server 2003。

编辑1:我已经包含了

myHub.connection.stateChanged(function (change) { alert("State: " + change.newState); }); 

进行调试,并在页面加载时,它显示的弹出式“状态:0”,其次是“状态:1”的弹出式窗口中很短的时间后,和我离开页面时的“状态:4”,所以看起来我的连接本身的行为是正确的。这在本地和部署服务器上运行相同。

编辑2:为了进一步测试,我已经更新在如下所述轮毂的方法:

public override Task OnConnected() 
{ 
    Groups.Add(Context.ConnectionId, Context.User.Identity.Name); 
    Clients.All.clientMessage("OnConnected:: ID: " + Context.ConnectionId + " USER: " + Context.User.Identity.Name); 
    return base.OnConnected(); 
} 

public void SuperfluousMethodToDoSameThingInOnConnect() 
{ 
    Clients.All.clientMessage("SuperfluousMethodToDoSameThingInOnConnect:: ID: " + Context.ConnectionId + " USER: " + Context.User.Identity.Name); 
} 

的这个测试表明,只有文本从SuperfluousMethodToDoSameThingInOnConnect发送结果显示返回给调用者。但是,其他客户端(在其他浏览器窗口中测试)请参见OnConnectedSuperfluousMethodToDoSameThingInOnConnect中的文本。

此外,当我尝试使用Context.Groups(Context.User.Identity.Name)发送消息给主叫方时,则不会发送消息。但是,如果我将组登记行Groups.Add(Context.ConnectionId, Context.User.Identity.Name)OnConnected移动到SuperfluousMethodToDoSameThingInOnConnect,则可以使用Groups.Add(Context.ConnectionId, Context.User.Identity.Name)发送消息可以。这看起来非常奇怪,因为我可以看到OnConnected方法被调用,但该组没有真正注册?

真的不知所措,以解释这种不规律的行为。

编辑3:将Web应用程序推送到Windows Server 2012 VM,在那里我发现它的工作正常,与我的本地开发箱相同。 SignalR在IIS 6上无法正常工作吗?

根据http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/supported-platforms中的'Supported server IIS versions',只支持IIS7或更新版本。

+0

谢谢!根据我的SignalR 1,我从该网站看到http://www.asp.net/signalr/overview/signalr-1x/getting-started-with-aspnet-signalr/supported-platforms是更适用的链接。 x版本,但我也看到该页面指定IIS7 +并且只能集成,而不是经典(其中IIS6是)模式。 – 2014-09-09 18:23:28

+0

再次感谢!有了这些信息,我至少能够对所有事情进行适当的评论,以便我们可以在升级服务器时以正确的方式返回并清理。现在只需要接受解决方法。 – 2014-09-09 18:41:17