2015-05-26 1 views
0

Я определил 2 отдельных концентратора в моем проекте, которые кажутся, что они разобраны в один прокси-сервер ... и я не против, пусть это будет.Множественный концентратор SignalR в Sametime

Далее я определил свой клиент, время, когда у меня был один клиент, у меня не было проблем с ним, , но теперь, когда у меня есть два концентратора, и оба приходят работать на одной странице, как только первый концентратор начинает работать хорошо , запрос отправляется на сервер и обратно. , но как только я вызываю частичную страницу, которая соединяется и разговаривает со вторым хабом, она переходит на connection.start, но она не разбивается на сервере, значит, сервер не уведомлен об этом действии .... теперь может мне кто-нибудь помочь?

Controller1:

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

]); 

Controller2:

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(); 
     } 
     ... 

    } 
} 

Mapping

[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

 Смежные вопросы

  • Нет связанных вопросов^_^