2012-04-16 13 views
8

Jeśli jednocześnie z różnych klientów występuje więcej niż jedno żądanie, wartość Hub.Context.ConnectionId zmienia się podczas wykonywania procedury obsługi.W SignalR jest Hub.Context wątek bezpieczny?

Powiedzmy, że mam 2 klientów połączonych z identyfikatorami klienta A i B, a ja mam metodę na moim hoście o nazwie foo(). Wysyłam żądanie od A do serwera wywołującego foo(), a podczas przetwarzania żądania A wysyłam żądanie od B wywołującego foo(). Na początku przetwarzania żądania A Hub.Context.ConnectionId == A ale na końcu wywołania metody Hub.Context.ConnectionId == B.

Czy powinienem kopiować Hub.Context? W którym momencie powinienem to zrobić?

Odpowiedz

7

Nie musi być bezpieczny dla wątków, ponieważ instancje Hub nie są statyczne, więc nie trzeba niczego kopiować.

Są one tworzone dla każdego połączenia. Zatem każde wywołanie od klienta utworzy nową instancję Hub i HubContext.

+0

Widzę, dziękuję, wróciłem do tego samego Hub z IHubActivator, teraz zmieniłem go, aby za każdym razem zwracać nowe Hub. –

0

Nie odpowiada to bezpośrednio na twoje pytanie, ale mój zwykły przepływ pracy polega na ustawianiu wartości dla osoby dzwoniącej przy pierwszym połączeniu, która może osiągnąć to, czego potrzebujesz?

Caller.clientId = Guid.NewGuid(); 
Powiązane problemy