【发布时间】:2017-03-27 11:33:27
【问题描述】:
这是我的中心代码:
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
namespace Voting.Hubs
{
public class VotingHub: Hub
{
private static readonly IHubContext HubContext = GlobalHost.ConnectionManager.GetHubContext<VotingHub>();
public override Task OnConnected()
{
Groups.Add(Context.ConnectionId, Context.Request.Url.Host);
return base.OnConnected();
}
public static void SendVotingResults(string channel, string content)
{
HubContext.Clients.Group(channel).votingResultMessage(content);
}
}
}
我从我的 API 中这样调用它:
VotingHub.SendVotingResults(Request.Headers["Host"], GenerateJson(result));
在角度我有以下工厂:
app.factory('backendHubProxy', ['$rootScope',
function ($rootScope) {
function backendFactory(hubName) {
var host = window.location.protocol + '//' + window.location.hostname;
var connection = $.hubConnection(host);
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);
}
});
});
}
};
};
return backendFactory;
}]);
然后在我的角度控制器中,我使用以下代码进行设置:
var votingHub = backendHubProxy('votingHub');
votingHub.on('votingResultMessage', function (data) {
console.log(data);
});
“Hub.OnConnect”似乎没有被调用,即使我的开发工具记录了
/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=9BlaqaLwJnMVduhWpMeQ0H0k0R5gV7rrHCQEdn5IV0KRRyRRD5C83v2AGQPXPzCLtMdAy5Tbus416oHgK%2FuAtPZYDRtiJw51reJKuq1kOcHu%2F5Hp9krbq1VmT8eZekjd&connectionData=%5B%5D&tid=0
/signalr/start?transport=webSockets&clientProtocol=1.5&connectionToken=9BlaqaLwJnMVduhWpMeQ0H0k0R5gV7rrHCQEdn5IV0KRRyRRD5C83v2AGQPXPzCLtMdAy5Tbus416oHgK%2FuAtPZYDRtiJw51reJKuq1kOcHu%2F5Hp9krbq1VmT8eZekjd&connectionData=%5B%5D&_=1490614124062
最后一次调用的响应是:{ "Response": "started" }
调用 SendVotingResults 在服务器上工作得很好,但客户端永远不会收到任何东西。
我做错了什么?
【问题讨论】:
标签: javascript c# angularjs signalr