2017-02-28 66 views
1

我一直在嘗試運行幾個程序代碼在服務器上的參數,我把形式和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客戶端 –

回答

1

你有一個客戶端回調稱爲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我不能相信我錯過了這一點。 –