这是我第一次尝试使用signaler,我不知道我的代码是否正确,此代码仅用于测试,signaler应该在从控制器操作调用时发送给所有客户端:
以下是我所做的:
1.使用nuget安装了signaler(我在捆绑/缩小方面有点问题),所以我要分别导入signaler js
2.在新文件夹singalr中创建中心:
[HubName("messageHub")]
public class MessagesHub : Hub
{
public void AddMessage(string htmlstring)
{
Clients.addMessage(htmlstring);
}
}
3.创建了客户端脚本,我只需要服务器->客户端,不需要两种方式:
<script src="@Url.Content("~/SignalR/jquery.signalR-0.5.2.min.js")" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<div class="content-wrapper">
<h1 id="lq" class="subtitle">Public Messages</h1>
</div>
<script type="text/javascript">
$(function ()
{
var message = $.connection.messageHub;
message.addMessage= function (htmlstring)
{
$(htmlstring).insertAfter('#lq');
};
$.connection.hub.start();
});
</script>
4.以下是当有人访问时,wich应向所有客户发送消息的操作。
public ActionResult Index(int id, string title)
{
MessagesModel model = new MessagesModel(id);
var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalR.MessagesHub>();
hubContext.Clients.addMessage("Sample Message");
return View(model);
}
所以我打开firefox,我可以在firebug中看到协商成功,打开chrome并转到这个页面索引,只想看到“示例消息”被插入到firefox的页面中,但是什么也没有发生,我遗漏了什么?
更新:
在firebug中导航离开页面时,未找到“/signaler/hubs”
最佳答案
这听起来可能很傻,但问题是客户机和服务器方法命名相同,尽管大小写不同,所以我改变了:
[HubName("messageHub")]
public class MessagesHub : Hub
{
public void AddMessage(string htmlstring)
{
Clients.addMessage(htmlstring);
}
}
致:
[HubName("messageHub")]
public class MessagesHub : Hub
{
public void SendMessage(string htmlstring)
{
Clients.addMessage(htmlstring);
}
}