Opracowuję rozwiązanie do śledzenia użytkowników za pomocą SignalR, jako zabawny projekt do nauki SignalR dla aplikacji ASP.NET MVC.Uzyskaj pełny adres URL wewnątrz koncentratora SignalR
Obecnie mogę śledzić zalogowanych użytkowników i określić, jak długo są oni na określonej stronie. Jeśli przejdą na inną stronę, śledzę to również i timer, który SignalR aktualizuje, resetuje ... Wiele innych funkcji jest zaimplementowanych lub częściowo wdrożonych.
Problem, jaki napotykam, polega na uzyskaniu pełnego adresu sterownika/działania/parametrów wewnątrz koncentratora SignalR?
Podczas korzystania z adresu HttpContext.Current.Request.Url
adres URL to zawsze /signalr/connect.
UWAGA:
var hub = $.connection.myHub;
$.connection.hub.start();
jest w _Layout.cshtml.
UPDATE:
Próbowałem użyć
var location = '@HttpContext.Current.Request.Url';
var hub = $.connection.myHub;
$.connection.hub.start().done(function() {
hub.setLocation(location);
});
A lokalizacja jest przekazywana poprawnie, ale muszę go na connect() zadanie nie później. Czy można to zrobić?
UPDATE 2:
Takie podejście nie działa
var hub = $.connection.myHub;
$.connection.hub.start(function(){hub.setLocation(location)});
jako Connect()
nazywa wcześniej.
W moim hubie mam kilka metod, ale chciałbym przekazać wartość (w moim przypadku lokalizację) do Connect()
, czy to możliwe?
public class MyHub : Hub, IDisconnect, IConnected
{
public Task Connect()
{
//do stuff here
//and i would like to have the **location** value
}
public Task Disconnect()
{
//do stuff here
}
}
Aktualizacja 3
Zastosowanie QueryString do przekazywania danych przed Connect()
występuje.
var location = '@HttpContext.Current.Request.Url';
var hub = $.connection.myHub;
$.connection.hub.qs = "location= + location;
$.connection.hub.start();
cześć ... ty nadal pracuje na tym rozwiązaniu śledzenia ... Czy myśli dzieląc swój kod? –
@jalchr Nie mam nic przeciwko, ale NDA zrobiłaby; (Będę łaskawie pomóc/wskaż we właściwym kierunku, jeśli masz jakieś pytania.) –
wskazówka: aby śledzić użytkowników, musisz się upewnić, że SignalR łączy się bezpośrednio przed pełnym załadowaniem strony zasoby: 'waitForPageLoad', więc upewnij się, że to ustawiłeś: http://stackoverflow.com/questions/32856436/signalr-is-slow-to-connect-from-javascript-client/32856492#32856492 –