我正在尝试将SignalR实现为一个简单的MVC 5项目。我已经完成this tutorial并且它可以正常工作,但我现在正试图从一个单独的控制器调用一个hub方法。
我有一个名为Generate.cshtml的视图,带有此标记和Javascript:
<script type="text/javascript">
$(function() {
var myHub = $.connection.ContosoChatHub;
myHub.client.writeMessageToScreen = function(message) {
$('#messages').append(message);
};
});
</script>
<input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />
<ul id="messages" class="round">
</ul>
集线器类是
[HubName("ContosoChatHub")]
public class ContosoChatHub : Hub
{
public void NewContosoChatMessage(string message)
{
Clients.All.NewMessage(message);
}
}
然后在我的控制器中,我想调用writeMessageToScreen方法 - 直接调用它,或通过hub类调用。
我读过我可以直接调用Javascript方法
public ActionResult Generate()
{
var context = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub>();
context.Clients.All.writeMessageToScreen("Test");
return View();
}
但这不起作用,没有任何内容写入屏幕..它也没有抛出任何错误,它只是没有做任何事情。
有没有人有任何想法发生了什么?有没有更好的方法从Controller调用Hub方法?
答案 0 :(得分:1)
您没有开始连接 的更新强>
在你的集线器课程
public class ContosoChatHub : Hub
{
public static NewContosoChatMessage(string message)
{
var notifyContext = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub >();
notifyContext.Clients.All.NewMessage(message);
}
}
然后在你的控制器
public ActionResult Generate()
{
ContosoChatHub.NewContosoChatMessage("Test");
return View();
}
$(function() {
var myHub = $.connection.ContosoChatHub;
$.connection.hub.start();
myHub.client.writeMessageToScreen = function(message) {
$('#messages').append(message);
};
});
这应该对你有用