我正在尝试使用SignalR
创建一个简单的用户计数器,但由于未知原因,我在控制台中收到此错误。我对signalR和asp.net很新,但我对我有意义,而且我不知道为什么我会收到错误。有人可以帮我解决这个问题并解释为什么会这样吗?
以下是索引视图中的代码。
<div class="row">
Number of online users <strong id="counter"></strong>
<script src="@Url.Content("~/Scripts/jquery-3.1.1.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.signalR-2.2.1.min.js")"></script>
<script src="@Url.Content("~/signalr/hubs")"></script>
<script>
$(function () {
var counterHub = $.connection.counterHub;
$.connection.hub.start().done(function () {
});
counterHub.client.UpdateCount = function (count) {
$("#counter").text(count);
}
});
</script>
集线器类:
public class CounterHub : Hub
{
static long counter = 0;
public override System.Threading.Tasks.Task OnConnected()
{
counter = counter + 1;
Clients.All.UpdateCount(counter);
return base.OnConnected();
}
public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
{
counter = counter - 1;
Clients.All.UpdateCount(counter);
return base.OnDisconnected(stopCalled);
}
//public void Hello()
//{
// Clients.All.hello();
//}
}
Startup.cs:
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
ConfigureAuth(app);
}
}
答案 0 :(得分:0)
您的聊天文件是否在应用程序的根目录中?
我认为您的页面唯一没有连接到Hub代理javascript文件:
ASP.NET SignalR JavaScript Library v1.0.0
此文件有一些连接到集线器的方法,包括:
$.hubConnection.prototype.createHubProxies = function () {
var proxies = {};
this.starting(function () {
// Register the hub proxies as subscribed
// (instance, shouldSubscribe)
registerHubProxies(proxies, true);
this._registerSubscribedHubs(); .......
缺少此方法会导致错误:
无法读取未定义的属性'counterHub'
因为它无法连接到滚刀并创建名为 counterHub 的对象。
所以请测试一下:在浏览器的另一个标签中加载你的应用程序后测试这个网址:
您应用内-URL / signalr /集线器
在本地主持人中有这样的事情:
看看你是否得到了javascript文件。如果没有,我建议你开始另一个项目(如果是测试)。
答案 1 :(得分:0)
不知道为什么,但这最终让它对我有用。我刚用@section scripts
包围了脚本标记:
@section scripts{
<script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
$(function () {
var myHub = $.connection.counterHub;
$.connection.hub.start().done(function () {
});
myHub.client.UpdateCount = function (count) {
$("#counter").text(count);
}
});
</script>
}