2017-03-27 6 views
1

からは何も受けていない、私の角度の方法は、私のハブコードです:はなぜここsignalr

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 

最後の呼び出しの応答があるにもかかわらず、呼び出されていないよう:{ "レスポンス": "開始"}

SendVotingResultsを呼び出すことはサーバー上で正常に動作しますが、クライアントは何も受信しません。

私は間違っていますか?

答えて

0

私はこれを解決する別の方法を見つけました。サーバー上で購読したいすべてのチャンネルに対して別個の機能が必要ですが、少なくとも機能します。私はまだ上記のコードが動作していない理由を理解することができません。

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; 
        }); 
関連する問題