2015-05-26 28 views
0

SignalR多個集中我在項目,這是他們似乎解析成單一的代理定義2個獨立的樞紐......我不反對它,讓它成爲。在的Sametime

接下來我定義了我的客戶,當時我有一個客戶我沒有問題, 但現在我有兩個集線器,並且都在一個頁面上工作,一旦第一個集線器啓動它工作良好,請求轉到服務器並返回。 但一旦我打電話給連接並與第二個集線器交談的部分頁面,它會轉到connection.start,但它不會在服務器上斷開,意味着服務器不會通知此操作...。現在任何人都可以幫助我嗎?

控制器1:

var app = angular.module("chatApplication", []); 
var myHub = $.connection.chatHub; 

app.controller("ChatController", [ 
    "$scope", "$timeout", "$templateCache", 
    function ($scope, $timeout, $templateCache) { 

     ... 

     $scope.RegisterClientMethod(myHub); 

     myHub.connection.start().done(function() { 
      //Already uses OnConnect Override 

      //TODO: Link Events To Required Buttons And Actions 
      //like: $(x).click(fnX); 

      //TODO: Call Started Events 
      //myHub.server.hello(); 
     }).fail(function (e) { 
      $scope.connectionMessage = "Connection Failed" + e.toString(); 
      $scope.$apply(); 
     }); 
    } 

]); 

控制器2:

var myUserHub = $.connection.userHub; 

app.controller("UserController", [ 
    "$scope", "$timeout", "$templateCache", 
    function($scope, $timeout, $templateCache) { 

     ... 

     $scope.RegisterClientMethod(myUserHub); 
     $scope.RegisterWatchers(); 

     myUserHub.server.getUsers(); 

     myUserHub.connection.start().done(function() { 
      //Since Connection is already open, by chatHub, we cannot relay on that 
      myUserHub.server.getUsers(); 
     }).fail(function (e) { 
      $scope.connectionMessage = "Connection Failed" + e.toString(); 
      $scope.$apply(); 
     }); 
    } 
]); 

HUB1:

namespace SignalRChatSystem.Hubs 
{ 
    [ChatAuthorize] 
    public class ChatHub : Hub 
    { 
     ... 

     public override Task OnConnected() 
     { 
      //client.doSomething 

      return base.OnConnected(); 
     } 
     ... 

    } 
} 

HUB2:

namespace SignalRChatSystem.Hubs 
{ 
    [UserAuthorize] 
    public class UserHub : Hub 
    { 
     ... 

     public override Task OnConnected() 
     { 
      //client.doSomething 

      return base.OnConnected(); 
     } 
     ... 

    } 
} 

映射

[assembly: OwinStartupAttribute(typeof(SignalRChatSystem.Startup))] 
namespace SignalRChatSystem 
{ 
    public partial class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      ConfigureAuth(app); 
      app.MapSignalR(); 
     } 
    } 
} 
+0

你能檢查這個嗎? – deadManN

回答

0

你應該叫$.connection.hub.start()只有一次,即使使用多個集線器。請參閱:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#establishconnection

如果您不確定以前是否啓動連接,您可以在啓動之前使用connectionState對象進行檢查。

$.signalR.connectionState 
Object {connecting: 0, connected: 1, reconnecting: 2, disconnected: 4} 

所以,你的啓動方法可能是這樣的:

if ($.connection.hub && $.connection.hub.state === $.signalR.connectionState.disconnected) { 
    $.connection.hub.start(); 
    //... 
} 

如果你的連接已經打開,你可以直接調用什麼在.done() {體。 也許你可以檢查之前:

if ($.connection.hub && $.connection.hub.state === $.signalR.connectionState.connected) { 
    // ... logic for second hub here 
} 
+0

所以我看到人們談論分離集線器 – deadManN

相關問題