Chcę mieć możliwość wysyłania do siebie wiadomości przez poszczególnych użytkowników za pomocą SignalR, dlatego muszę wysłać do określonego ID klienta. Jak zdefiniować identyfikator klienta dla określonego użytkownika na początku sesji - powiedz klucz podstawowy GUID dla użytkownika?SignalR - Ustaw ClientID ręcznie
Odpowiedz
Wymień IConnectionIdFactory na własny https://github.com/SignalR/SignalR/wiki/Extensibility.
wykorzystanie próbki: http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/
EDIT: To nie jest już obsługiwana w najnowszych wersjach SignalR. Ale można określić identyfikator użytkownika dla określonego połączenia przy użyciu nowego IUserIdProvider
SignalR Client Side documentation przedstawia następujące:
connection.id - Pobiera lub ustawia identyfikator klienta dla bieżącego połączenia
To z pewnością oznacza, że powinno być możliwe ustawienie klienta clientID, bez całej powyższej instalacji hydraulicznej. Czy to nie działa? Jeśli działa, jak by wyglądała ta linia kodu?
Nie próbowałem tego, ale muszę mieć możliwość przypisania identyfikatora połączenia do czegoś znanego na serwerze, takiego jak identyfikator GUID (identyfikator użytkownika), więc rozwiązanie IConnectionFactory działa najlepiej dla mnie. – reach4thelasers
+1 za podniesienie tego numeru – reach4thelasers
W aplikacji SignalR w wersji 1, używając metody Hubs, nadpisuję metodę Hub OnConnected() i zapisuję powiązanie identyfikatora użytkownika .NET z bieżącym identyfikatorem połączenia (Context.ConnectionId) w bazie danych SQL.
Następnie przesłonię metodę Hub OnDisconnected() i usuwam powiązanie między identyfikatorem użytkownika .NET a bieżącym identyfikatorem połączenia. Oznacza to, że po ponownym załadowaniu strony połączenie userId/connectionId będzie aktualne.
Coś wzdłuż linii:
public class MyHub : Hub
{
private MembershipUser _user
{
get { return Membership.GetUser(); }
}
private Guid _userId
{
get { return (Guid) _user.ProviderUserKey; }
}
private Guid _connectionId
{
get { return Guid.Parse(Context.ConnectionId); }
}
public override Task OnConnected()
{
var userConnectionRepository = new UserConnectionRepository();
userConnectionRepository.Create(_userId, _connectionId);
userConnectionRepository.Submit();
return base.OnConnected();
}
public override Task OnDisconnected()
{
var userConnectionRepository = new UserConnectionRepository();
userConnectionRepository.Delete(_userId, _connectionId);
userConnectionRepository.Submit();
return base.OnDisconnected();
}
}
Potem, gdy muszę wywołać zdarzenie SignalR dla konkretnego użytkownika, mogę wypracować ConnectionId ze stowarzyszenia (ów) bazy danych z aktualnym użytkownikiem - nie może być więcej niż jedno powiązanie, jeśli zaangażowanych jest wiele instancji przeglądarki.
Czy masz przykład tego? – CR41G14
Zaktualizowałem swoją odpowiedź na przykładzie –
- 1. uzyskać kontrolę przez clientID
- 2. Get ClientID kontroli w Repeater
- 3. Ustaw plik cookie z koncentratora SignalR na serwerze
- 4. SignalR OnConnected - Wysyłanie połączonego klienta Wiadomość
- 5. signalR:/signalr/hubs nie jest generowany
- 6. Require.js + SignalR
- 7. SignalR MethodAccessException
- 8. SignalR Security
- 9. Ustaw identyfikator klienta w asp.net
- 10. SignalR i dołączanie do grup
- 11. Jak utworzyć clientId i clientSecret dla OAuthTokenCredential paypal rest api
- 12. implement signalR bez jquery
- 13. Przeciążenie SignalR Hub
- 14. SignalR i AspNetHost.DependencyResolver
- 15. Zabezpieczanie połączeń SignalR
- 16. SignalR - Wyślij wiadomość OnConnected
- 17. Rozłączenie klienta SignalR .NET
- 18. SignalR i HTTPS
- 19. SignalR demo nie działa
- 20. SignalR i urządzenia mobilne
- 21. SignalR z vNext
- 22. Domyślny awaryjny klient SignalR
- 23. SignalR i równoważenie obciążenia
- 24. SignalR: $ .connection jest niezdefiniowane
- 25. SignalR dysponowania HubConnection
- 26. Usługa WCF z SignalR
- 27. SignalR $ .connection is undefined
- 28. Gwarantowana dostawa w SignalR
- 29. WebTest dla SignalR możliwe?
- 30. Rejestrowanie wyjątków SignalR?
Doskonały - dzięki za odpowiedź i link do bloga! – reach4thelasers
Czy istnieje sposób ręcznego ustawienia identyfikatora klienta bez używania plików cookie? być może parametr metody startowej() lub inny sposób przekazywania informacji do obiektu żądania w fabryce połączeń niestandardowych? –
Dzięki za link do mojego bloga! – 1kevgriff