2016-08-29 89 views
0

我有一个使用SignalR-2.2.1的客户端到服务器的请求。在请求之后,服务器将把结果发回给调用者。 这里是我的JavaScript代码:C#MVC - 用SignalR从服务器发送消息给呼叫者

$(document).ready(function() { 
    var myHub = $.connection.signalHub; 
    myHub.client.receive = function (tmp) { 
     var obj = $.parseJSON(tmp); 
     //do something 
    }; 
    $.connection.hub.start().done(function() { 
     $('#xxxxx').click(function() { 
      var form = $("form"); 
      form.submit(); 
      myHub.server.sendSomething(); 
     }); 
    }).fail(function (reason) { 
     //do something 
    }); 
}); 

这里是从我的服务器端

public partial class SignalHub : Hub 
{ 
    public void SendSomething() 
    { 
     Clients.All.receive(MyJson); 
    } 
} 

代码当我使用Clients.All功能,它完美的罚款。但我想要的是服务器只将结果发回给调用者(发送请求的那个)。 因此,我将Clients.All.receive(MyJson)更改为Clients.Caller.receive(MyJson)。我更改后,现在客户端不更新内容。我需要在客户端指定我的接收函数,它会得到不同的东西吗?

+0

不,应该有效。浏览器控制台中有什么? –

+0

@Mark检查我的回答 –

+0

@SamiKuhmonen它的功能在javascript中不被调用。 theres没有在控制台/日志。 – Mark

回答

1

我的猜测是,因为您打电话给form.submit();,您可能会导航离开页面或可能重新加载它,从这种意义上说,在新的/重新加载的页面之间建立了具有不同“connectionId”的新连接,因此消息打算用于Client.Caller已丢失,因为它与您导航离开或刷新的页面上建立的连接相关联。

您可能想考虑使用AJAX发布表单数据而不是完整的表单提交。

+0

我也尝试在表单提交后发送连接ID,并使用'Clients.Client(connectionID).receive(MyJson)'从服务器发回它,但它仍然是一样的。我会尝试使用AJAX并更新结果 – Mark

+0

现在它的工作状态非常好。所以问题出现在'form.submit()'中。在我将其改为“AJAX调用”并将结果呈现在页面后,SignalR现在工作正常。多谢, – Mark