2017-03-27 40 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; 
        }); 
相關問題