我是signalR的新手。我正在做的是创建一个简单的应用程序,它将名称添加到数据库并显示给客户端,但我收到错误"无法读取属性'客户端'未定义" 这是我的angularJS代码
myApp.controller('firstController', function ($scope, $http) {
$scope.saveName = function () {
$http.post("/Name/saveName/", { userName: $scope.name }).then(function (response) {
$scope.loadNames();
})
}
$scope.loadNames = function () {
$http.get("/Name/getName/").then(function (response) {
$scope.nameList = response.data;
})
}
$scope.loadNames();
$scope.hub = $.connection.myHub;
$scope.notify = function () {
$scope.hub.client.UserAddHub = function (name) {
$scope.$apply(function () {
$scope.nameList.push(name);
})
}
$.connection.hub.start();
}
$scope.notify();
});
这是我在服务器端写的
private static IHubContext userHubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
operations op = new operations();
op.save(userName);
userHubContext.Clients.All.UserAddHub(userName);
这是我的中心课程
[HubName("myHub")]
public class MyHub : Hub
{
}
我错过了什么。有什么建议吗?谢谢。
答案 0 :(得分:1)
如果您使用外部脚本加载signalR,请确保在Layout.cshtml(或您正在使用的任何其他布局)中添加此引用
<script src="~/signalr/hubs"></script>
添加signalR后。代码似乎没有任何问题,我只能看到你的集线器是空的。
修改:对于未来的读者,请仔细检查是否已将app.MapSignalR();
添加到Startup.cs类中。
答案 1 :(得分:-1)
在$ scope.hub行之后添加:
$scope.hub.client = {};
还注意到你打电话给$ .connection.myHub;然后你在$ .connection.hub上调用start()方法......应该是$ .connection.myHub.start();或者应该是$ scope.hub.start(); ?