从控制器实时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 >: ' + encodedMsg + '</li >');
};
$.connection.hub.start();
});
</script>
,这里是我的枢纽类别:
namespace SignalR1.Hubs
{
public class MyHub1 : Hub
{
public void Message(string message)
{
Clients.All.messageSend(message);
}
}
}
答
你有一个客户端回调称为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我不能相信我错过了这一点。 –
定义“不起作用” –
@GôTô我已经调试控制器,捕获的数据。但消息没有显示在web客户端 –