使用Clients.Group时未触发SignalR Javascript客户端回调
我用的是信号机RC2,这是我的中心使用Clients.Group时未触发SignalR Javascript客户端回调,javascript,signalr,signalr.client,Javascript,Signalr,Signalr.client,我用的是信号机RC2,这是我的中心 public class ImgHub : Hub { public void Create(string guid) { Groups.Add(Context.ConnectionId, "foo"); } public void SendMsg(string msg) { Clients.Group("foo").send(msg); } } 我有一个控制台应用程序和一个连
public class ImgHub : Hub
{
public void Create(string guid)
{
Groups.Add(Context.ConnectionId, "foo");
}
public void SendMsg(string msg)
{
Clients.Group("foo").send(msg);
}
}
我有一个控制台应用程序和一个连接到此中心的Web应用程序(asp.net webforms)。控制台应用程序的工作原理与我预期的一样,问题在于Javascript部分。当我使用SendMsg中的Clients.Group时,如果我将SendMsg更改为此,则不会触发“send”回调
public void ShareImage(byte[] image, string guid)
{
Clients.All.ReceiveImage(image);
}
它起作用了。下面是Javascript代码
<script src="Scripts/jquery-1.7.1.min.js"></script>
<script src="Scripts/jquery.signalR-1.0.0-rc2.min.js"></script>
<script src="http://localhost:4341/signalr/hubs/" type="text/javascript"></script>
<script type="text/javascript">
var mainHub;
$(function () {
$.connection.hub.url = 'http://localhost:4341/signalr';
// Proxy created on the fly
mainHub = $.connection.imgHub;
mainHub.client.send = function (msg) {
alert(msg);
};
// Start the connection
$.connection.hub.start(function() {
mainHub.server.create('vanuit den JS');
})
.done(function() {
$('#msgButton').click(function() {
mainHub.server.sendMsg("msg from JS");
});
});
});
</script>
var mainHub;
$(函数(){
$.connection.hub.url='0http://localhost:4341/signalr';
//动态创建的代理
mainHub=$.connection.imgHub;
mainHub.client.send=函数(msg){
警报(msg);
};
//启动连接
$.connection.hub.start(函数(){
mainHub.server.create('vanuit den JS');
})
.done(函数(){
$('#msgButton')。单击(函数(){
mainHub.server.sendMsg(“来自JS的消息”);
});
});
});
正如您在JS代码中看到的,我在页面上还有一个调用SendMsg函数的按钮,消息确实到达控制台应用程序,因此我猜JS客户机在SignalR组中已正确注册
我不是JS专家,所以我希望比我更了解它的人能在这里帮助我。发送函数可能无法执行的原因之一是,当您允许在客户端上调用sendMsg时,客户端可能还不在组“foo”中 在$.connection.hub.start中,您正在注册一个在start完成时调用的函数,但您也在注册另一个在start完成后通过.done调用的函数。因此,两个函数几乎同时启动。因此,当sendMsg函数可供调用时,您可能尚未成功添加到组中 以下是解决该问题的方法:
$.connection.hub.start().done(function() {
mainHub.server.create('vanuit den JS').done(function() {
$('#msgButton').click(function() {
mainHub.server.sendMsg("msg from JS");
});
});
});
实际上,我一直在等待组加入成功完成,直到允许sendMsg通过
我知道这是一个很难回答的问题,因为你可能在连接启动后等待了很长一段时间,仍然没有任何事情发生,但我无法复制我这方面的行为
如果我上面的修复不起作用,您应该通过设置断点来确保调用服务器端功能。这是因为您需要在全局asax中启用重新加入组
GlobalHost.HubPipeline.EnableAutoRejoiningGroups();
这里有更多的细节:
对于1.0 RTM,此方法调用将消失,但现在您需要这样做。thx获取答案,但结果是相同的。我确信我的服务器端函数被调用了,断点被命中了,客户端也被激活了。这一切都很好——GlobalHost.HubPipeline.EnableAutoRejoiningGroups();但它确实解决了问题,谢谢!