我是SignalR的新手,我正在尝试将其与AngularJS站点和WebAPI集成。我跟着greate this示例开始。但是,正如我所提到的,我正在处理的网站将与WebAPI项目位于不同的服务器上。
在我的开发环境中,我为Angular设置了一个本地站点,在IIS上托管在localhost:60000 / 127.0.0.1:60000上,WebAPI生活在localhost:31374上(在VS2013中,使用IIS Express。)这是模拟项目将存在的2个不同的服务器。
在我的Angular项目中,我尝试通过执行以下操作连接到SignalR中心:
var connection = $.hubConnection();
$.connection.hub.url = "http://localhost:31374/signalr";
//$.connection.url = "/signalr";
//$.conenction.baseUrl = "http://localhost:31374";
this.proxy = connection.createHubProxy('foos');
console.clear();
// start connection
console.log(connection);
connection.start();
this.proxy.on('newFoo', function (data) {
$rootScope.$emit("newFoo", data);
});
控制台中的结果如下所示:
在我的代码中,您可以看到我正在尝试设置集线器URL(并在其下方的注释中,我已尝试手动设置连接对象的属性。)但是,在屏幕截图中您可以看到URL或baseURL都不是我设置的,实际上baseURL仍然指向http://127.0.0.1:60000/上的Angular站点,而不是http://localhost:31374/。
我错过了什么?
答案 0 :(得分:1)
这个设置看起来有些偏差。具体来说,您的connection.start()
电话可能不正确。我已经在Angular中使用跨域服务器完成了此操作,并具有以下设置,可以正常工作
var proxy;
$(function () {
$.connection.hub.url = 'http://localhost:31374/signalr';
$.connection.hub.start({ xdomain: true })
.done(function () {
console.log('Connected. connectionId : ' + $.connection.hub.id);
})
.fail(function () {
console.log('Could not connect!');
});
proxy = $.connection.yourServerHubName;
proxy.client.yourClientHubMethod = function () {
// your client hub functions
};
});
另外请务必检查您是否在HTML中加载了正确生成的.js文件
<script src="//localhost:31374/signalr/hubs"></script>