usługa WCF w WPF - Informowanie pozostałych klientów o akcji jednego klienta

0

Witajcie :). Klient z usługą łączy się poprzez NET TCP Binding. Z racji tego, że klientów będzie max 20 klient utrzymuje połączenie dzięki czemu usługa może poprzez kontrakt zwrotny wysyłać do klienta polecenia.
Bazę "aktywnych połączeń" przechowuję w statycznej liście.
W interfejsie IUserBinding znajduje się metoda

OperationResult BindUser(string Login, string Password);

Jeżeli usługa poprawnie przetworzy metodę pobiera z listy tablicę wszystkich połączeń, a następnie wysyła do każdego z nich za pomocą kontraktu zwrotnego:

void UserOnline(string PublicUserKey);

Z racji tego, że od 10 lat po napisaniu połowy programu widzę, że coś "można zrobić prościej i lepiej" i zaczynam pisać od nowa, spytam od razu. Czy takie informowanie klientów jest zgodne z dobrymi praktykami? Uważam siebie dalej za początkującego programistę i wolę zaczerpnąć rad kogoś bardziej doświadczonego.

1

Nie, jeśli wpiszesz w google "WCF Broadcast" to tak właśnie będzie wyglądała większość implementacji
W zależności od zastosowania możesz się przyjrzeć SignalR, którego głównym celem jest utrzymywanie stałego połączenia z klientami i informowanie o zdarzeniach. Co prawda został stworzony raczej dla asp.net, ale może być wykorzystywany też w desktopowych aplikacjach, a w przyszłości łatwiej byłoby stworzyć wersję webową, lub nawet zaimplementować komunikację między klientami desktopowymi i webowymi/mobilnymi

Tu masz porównanie
https://stackoverflow.com/a/15360416/

Tak jak ktoś tam zauważył w WCF musisz też dbać o ciągłość połączenia - klienci z którymi długo nie było komunikacji mogą timeoutować, musisz też śledzić i wykrywać zerwane połączenia

0

W WCF rozwiązałem problem wykrycia przerwania obsługując event fault w połączeniu zwrotnym. Działa jak należy

1 użytkowników online, w tym zalogowanych: 0, gości: 1