从控制器实时C#SignalR推送通知不工作

问题描述:

我一直在尝试运行几个程序代码在服务器上的参数,我把形式和MVC控制器执行。我希望控制器上每一步(方法/功能)都被调用,将信息更新到客户端Web实时。从控制器实时C#SignalR推送通知不工作

我一直在尝试使用SignalR来更新实时推送通知/信息到客户端,它与客户端触发器的工作,但是当我试图从控制器调用集线器时它的工作。

这里是我的控制器代码:

[HttpPost] 
     public string data (Models.ExModel data) 
     { 
      var hub = GlobalHost.ConnectionManager.GetHubContext<Hubs.MyHub1>(); 
      //Execute Code 

      //send to client 
      hub.Clients.All.Message(data.apaAja); 

      return "success"; 
     } 

这里是我的客户端代码:

<h2>Index</h2> 


@Ajax.BeginForm("data", "Home", FormMethod.Post, null) { 
<div class="input-group"> 
    <span>Apa Aja</span> 
    @Html.EditorFor(model => model.apaAja, new { htmlhtmlAttributes = new { @id = "apaAja" } }) 
</div> 
<div class="input-group"> 
    <span> Boleh </span> 
    @Html.EditorFor(model => model.boleh, new { htmlhtmlAttributes = new { @id = "boleh" } }) 
</div> 
<button id="subm" type="submit">Submit</button> 

<div id="container"> 
</div> 
@section scripts{ 
    <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script> 
    <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script> 
    <script src="~/signalr/hubs"></script> 
    <script> 
     $(document).ready(function() { 
      var c = $.connection.myHub1; 
      c.client.messageSend = function (message) { 

       var encodedMsg = $('<div />').text(message).html(); 
       // Add the message to the page. 
       $('#container').append('<li> <strong>' + 'Info Message : ' + 
        '</strong >:&nbsp;&nbsp; ' + encodedMsg + '</li >'); 
      }; 

     $.connection.hub.start(); 

     }); 
    </script> 

,这里是我的枢纽类别:

namespace SignalR1.Hubs 
{ 
    public class MyHub1 : Hub 
    { 
     public void Message(string message) 
     { 
      Clients.All.messageSend(message); 
     } 
    } 
} 
+1

定义“不起作用” –

+0

@GôTô我已经调试控制器,捕获的数据。但消息没有显示在web客户端 –

你有一个客户端回调称为messageSend,然后在你的中心你有正确的Clients.All.messageSend,但是当你使用GlobalHost.Connect ctionManager.GetHubContext您正在访问集线器上下文而不是集线器类本身。

因此改变为:

 var hub = GlobalHost.ConnectionManager.GetHubContext<Hubs.MyHub1>(); 
     //you don't actually have access to the MyHub1 class at this point 
     // instead of 
     // hub.Clients.All.Message(data.apaAja); 
     // you need 
     hub.Clients.All.messageSend(data.apaAja); 

事实上,使用这种机制,当毂类方法变得略多余的。我通常使用集线器类来管理连接和客户端使用覆盖onconnected等...

+0

谢谢@reckface我不能相信我错过了这一点。 –