Javascript 信号器集线器代理处于不工作状态

Javascript 信号器集线器代理处于不工作状态,javascript,angularjs,signalr,Javascript,Angularjs,Signalr,我正在尝试将信号器添加到我的Angular MVC应用程序中。我用这篇文章作为起点,它有一个中心代理工厂,它用来。。。好。。。代理中心调用。我已经全部安装好了,但是服务器上的集线器无法与我的角代码通信。这是我的密码: 集线器代理工厂: app.factory('hubProxy', ['$rootScope', 'signalRUrl', function ($rootScope, signalRUrl) { function hubFactory(hubName) {

我正在尝试将信号器添加到我的Angular MVC应用程序中。我用这篇文章作为起点,它有一个中心代理工厂,它用来。。。好。。。代理中心调用。我已经全部安装好了,但是服务器上的集线器无法与我的角代码通信。这是我的密码:

集线器代理工厂:

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
vs
this.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();
}