Javascript 信号器集线器代理处于不工作状态
我正在尝试将信号器添加到我的Angular MVC应用程序中。我用这篇文章作为起点,它有一个中心代理工厂,它用来。。。好。。。代理中心调用。我已经全部安装好了,但是服务器上的集线器无法与我的角代码通信。这是我的密码: 集线器代理工厂:Javascript 信号器集线器代理处于不工作状态,javascript,angularjs,signalr,Javascript,Angularjs,Signalr,我正在尝试将信号器添加到我的Angular MVC应用程序中。我用这篇文章作为起点,它有一个中心代理工厂,它用来。。。好。。。代理中心调用。我已经全部安装好了,但是服务器上的集线器无法与我的角代码通信。这是我的密码: 集线器代理工厂: app.factory('hubProxy', ['$rootScope', 'signalRUrl', function ($rootScope, signalRUrl) { function hubFactory(hubName) {
app.factory('hubProxy', ['$rootScope', 'signalRUrl', function ($rootScope, signalRUrl) {
function hubFactory(hubName) {
var connection = $.hubConnection(signalRUrl);
var proxy = connection.createHubProxy(hubName);
connection.start().done(function () { });
return {
on: function (eventName, callback) {
proxy.on(eventName, function (result) {
$rootScope.$apply(function () {
if (callback) {
callback(result);
}
});
});
},
invoke: function (methodName, callback) {
proxy.invoke(methodName)
.done(function (result) {
$rootScope.$apply(function () {
if (callback) {
callback(result);
}
});
});
},
connection: connection
};
};
return hubFactory;
}]);
角度控制器:
angular.module('testApp').controller('testController', ['$scope', 'hubProxy', function ($scope, hubProxy) {
var pendingPaymentsHub = hubProxy('pendingPaymentsHub');
pendingPaymentsHub.on('onUpdatePendingPayment', function (data) {
console.log('hub callback!');
});
}]);
枢纽:
加载页面时,/signal/congregate
和/signal/start
调用均成功运行(在浏览器开发工具中确认,时间为200s)。我还可以确认我的hub中的UpdatePendingPayment
方法被调试命中。我只是在前端一无所获。为什么?
提前谢谢
更新:
需要明确的是,问题在于集线器代理工厂。当我在控制器中将工厂实现替换为以下内容时,一切正常:
function initializeHub() {
connection = $.hubConnection(signalRUrl);
hub = connection.createHubProxy('pendingPaymentsHub');
hub.on('onUpdatePendingPayment', function (data) {
console.log('success');
});
connection.start();
};
尝试对客户端的服务器端方法调用使用大写,即使它在客户端以小写开头:
hub.Clients.All.OnUpdatePendingPayment(pendingPayment);
检查生成的代理以查看完成了什么方法映射,这就是我发现大写问题的地方
要点包括这一点,代理使用camelCase:
[…]此外,SignalR使用驼峰大小写方法创建集线器代理,如下所示:
在JavaScript中是合适的,因此在
在客户端代理中将服务器称为sendMessage
我一直在学习同一个教程,我相信问题在于,在为hubProxy对象定义.on()方法之后,必须调用connection.start()。不过,我不知道教程示例在这种情况下应该如何工作 这是我的重做服务:
app.factory('hubProxy', ['$rootScope', 'serverUrl', function ($rootScope, serverUrl) {
function backendFactory(hubName) {
$.support.cors = true;
var connection = $.hubConnection(serverUrl);
var proxy = connection.createHubProxy(hubName);
return {
on: function (eventName, callback) {
proxy.on(eventName, function (result) {
$rootScope.$apply(function () {
if (callback) {
callback(result);
}
});
});
},
invoke: function (methodName, callback) {
proxy.invoke(methodName)
.done(function (result) {
$rootScope.$apply(function () {
if (callback) {
callback(result);
}
});
});
},
start: function(){
connection.start().done(function () { });
}
};
};
return backendFactory;
}]);
然后,在调用on()方法后,只需调用start():
])) 根据使用的版本,这可能不再是一个问题。感谢您的回复。它不起作用。我用的是2.2.0。查看我的更新。我曾经使用过完全相同的代理工厂。没什么奇怪的。这可能只是控制器中的范围问题吗
var pendingPaymentsHub
vsthis.pendingPaymentsHub
@rdoubleui不幸的是,这不起作用。奇怪,希望其他人有想法。想知道原因!
hub.Clients.All.OnUpdatePendingPayment(pendingPayment);
app.factory('hubProxy', ['$rootScope', 'serverUrl', function ($rootScope, serverUrl) {
function backendFactory(hubName) {
$.support.cors = true;
var connection = $.hubConnection(serverUrl);
var proxy = connection.createHubProxy(hubName);
return {
on: function (eventName, callback) {
proxy.on(eventName, function (result) {
$rootScope.$apply(function () {
if (callback) {
callback(result);
}
});
});
},
invoke: function (methodName, callback) {
proxy.invoke(methodName)
.done(function (result) {
$rootScope.$apply(function () {
if (callback) {
callback(result);
}
});
});
},
start: function(){
connection.start().done(function () { });
}
};
};
return backendFactory;
}]);
app.controller('hubDataController', ['$scope', 'hubProxy',
function ($scope, hubProxy) {
var proxy = hubProxy('remoteHub');
proxy.on('broadcast', function (data) {
console.log(data);
});
proxy.start();
}