我的angularclient可以调用serverhub。但是从不接收来自服务器的推送消息,使用此行发送:
hub.Clients.All.serverTime(DateTime.UtcNow.ToString());
出于调试目的,我在订阅中添加了console.log(...)
(signalrhubproxy.js):
proxy.on(eventName, function (result) {
console.log('event:' + eventName + ' received.' ); <--- never fired
$rootScope.$apply(function () {
if (callback) {
callback(result);
}
});
});
我已经按照本教程Pushing Data: Integrating with ASP.NET SignalR Hubs进行了一些操作 我的应用程序中的修改:
它有一个带有startup.cs的WebAPI结构,具有此SignalR配置:
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
EnableJSONP = true
};
map.RunSignalR(hubConfiguration);
});
而不是global.asax中的这个:
RouteTable.Routes.MapHubs(new HubConfiguration {EnableCrossDomain = true});
AreaRegistration.RegisterAllAreas();
WebAPI在localhost:2034(VS)
我能够:
- 从客户端调用servermethod getServerTime
- 运行BackgroundServerTimeTimer
- 使用{<1}}获取hub
:
BackgroundServerTimeTimer
并通知客户:
hub = GlobalHost.ConnectionManager.GetHubContext<ClientPushHub>();
是我的盒子吗? - 我的盒子在Windows 7上运行,并且有VS 2013
更新 我已经实现了简单'Getting started chatsample'而没有更改服务器配置。那就是工作。所以,很清楚它在我的angularjs中是一个客户端问题。
答案 0 :(得分:1)
app.js
的值为.value('signalRServer', 'http://localhost:2032/')
网站上的示例创建了这样的hubproxies,没有使用.value:
function ServerTimeController($scope, signalRHubProxy) {
var clientPushHubProxy = signalRHubProxy(
signalRHubProxy.defaultServer, 'clientPushHub', <--- signalRHubProxy.defaultServer should be: signalRServer
{ logging: true });
var serverTimeHubProxy = signalRHubProxy(
signalRHubProxy.defaultServer, 'serverTimeHub'); <--- signalRHubProxy.defaultServer should be: signalRServer
clientPushHubProxy.on('serverTime', function (data) {
$scope.currentServerTime = data;
var x = clientPushHubProxy.connection.id;
});
$scope.getServerTime = function () {
serverTimeHubProxy.invoke('getServerTime', function (data) {
$scope.currentServerTimeManually = data;
});
};
};
为了完整,正确的方式:
angular.module('yourApp').controller('yourCtrl', function ($scope, signalRHubProxy, signalRServer ) {
var clientPushHubProxy = signalRHubProxy(
signalRServer, 'clientPushHub',
{ logging: true });
var serverTimeHubProxy = signalRHubProxy(
signalRServer, 'serverTimeHub',
{ logging: true });
clientPushHubProxy.on('serverTime', function (data) {
$scope.currentServerTime = data;
//jshint unused:false
var x = clientPushHubProxy.connection.id;
console.log('Client pushhubproxy id: ' + x );
});
.....
答案 1 :(得分:0)
真正的问题:我正在挖掘不同的signalR版本和旧版本的示例。
以下是SignalR 2的版本:signalr angular example