gpt4 book ai didi

javascript - 为什么我的 Angular 方法没有从信号器接收到任何内容

转载 作者:行者123 更新时间:2023-11-28 04:49:39 25 4
gpt4 key购买 nike

这是我的中心代码:

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));

在 Angular 中我有以下工厂:

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;
}]);

然后在我的 Angular Controller 中,我使用此代码进行设置:

    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 在服务器上工作正常,但客户端从未收到任何内容。

我做错了什么?

最佳答案

我找到了另一种解决此问题的方法,它确实需要为服务器上要订阅的所有 channel 提供单独的功能,但至少它有效。我仍然无法弄清楚为什么上面的代码不起作用。

app.service("signalrService", ['$rootScope', function ($rootScope) {
this.votingResultMessages = function (callback) {
var hub = $.connection.votingHub;
$.extend(hub.client, {
votingResultMessage: function(data) {
$rootScope.$apply(function () {
if (callback)
callback(data);
}
);
}

});
$.connection.hub.start(function () { });
}
}]);

您可以这样调用该服务:

signalrService.votingResultMessages(function (data) {
scope.voteResults = data.ResolutionDetail;
});

关于javascript - 为什么我的 Angular 方法没有从信号器接收到任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43045272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com