2015-09-11 4 views
1

У нас есть метод обратного вызова клиента SignalR, который вызывается столько раз, сколько мы отходим от него и возвращаемся на его содержащую страницу. Например: страница salesUpdate.html (Угловой шаблон), на этой странице при первом входе вызов будет выполняться один раз на событии. Теперь, когда мы отодвинемся от этой страницы на другую страницу (скажем, purchaseUpdate.html) и вернемся на эту страницу, то есть salesUpdate.html, этот метод обратного вызова клиента SignalR будет выполняться дважды. Он будет выполняться столько раз, сколько мы удаляемся от страницы и возвращаемся к нему. С сервера этот метод вызывается из веб-API ASP.NET, а веб-интерфейс запускается только один раз, все последующее выполнение обратного вызова не затрагивает веб-API. Вот клиент обратного вызова метода:Метод callback обратного вызова SignalR, вызываемый несколько раз

var con; 
var apiMsgProxy; 
$(document).ready(function() { 
     con = $.hubConnection('http://localhost:51123/signalr'); 
     apiMsgProxy = con.createHubProxy('salesHub'); 

     apiMsgProxy.on('SendSaleUpdate', function (uMsg) { 
      console.log("Call back SendSaleUpdate called - " + uMsg); 
     }); 
     con.start().done(function() { 
     console.log("SignalR connection opened - " + con.state); 
     }).fail(function() { 
      console.log('Could not Connect SignalR hub!'); 
     }); 
}); 

Любой указатель в этом направлении будет весьма признателен.

+0

Где в вашем угловом приложении создается соединение концентратора? Это в контроллере или службе или что-то еще? – lintmouse

+0

Это в jQuery '$ (document) .ready()' в блоке сценария HTML-страницы, где он открывает соединение с концентратором и создает прокси-сервер. Это не в контроллере/сервисе Angular app. – viking

+0

Можете ли вы подтвердить, что вы попали в событие «Повторное подключение» (n-1 раз)? Возможно, проверьте «ConnectionId». – rdoubleui

ответ

2

Я знаю, что этот вопрос был задан давно. Но у меня была такая же проблема и я нашел решение. Думал, что я поделюсь им со всеми. В этом вопросе «salesHub» становится включенным, а обработчик событий добавляется с использованием метода hon .on («SendSaleUpdate») при загрузке страницы. По-видимому, если вы не «отключите» этого обработчика, он будет вызываться SignalR как время грифа, так как клиент запустил концентратор (посетил ту же страницу, пока одно и то же соединение все еще открыто). Чтобы этого не произошло, вы необходимо вызвать метод hoff .off («SendSaleUpdate»), когда пользователь покидает страницу. Это решило ту же проблему для меня.

+0

У меня такая же проблема и не удалось найти решение. Я использую signalr в моем проекте xamarin.forms, и у нас нет метода .off. Вы знаете что-нибудь об этом – Guest