2013-04-11 16 views
10

Projektuję architekturę klient-serwer, która jest realizowana za pomocą Windows Communication Foundation. W jednym z przypadków użycia serwer musi uzyskać żądanie statusu klienta (ów), co oznacza, że ​​musi wywołać metodę SendStatus() na kliencie klienta i poprosić o jej status. Właśnie zastanawiałem się, czy ten przypadek użycia może zostać zaimplementowany za pomocą WCF, bez tworzenia autonomicznej usługi po stronie klienta. Próbuję uniknąć gniazd, ponieważ klient jest usługą w tle i jest zasadniczo zawsze podłączony do serwera. Rozumiem, że WCF ostatecznie używa gniazd do komunikacji, ale próbuję użyć WCF, ponieważ jest to bardziej jak dowód koncepcji.Komunikacja dwukierunkowa przy użyciu WCF

Obejście problemu polegało na tym, że klient mógł wywołać metodę SendClientStatus() na serwerze serwera i wysłać jej status co 5 sekund. Ale znowu nie wydaje się to dobrym podejściem. Każda pomoc będzie doceniona.

+4

To się nazywa komunikacja dwustronna. [Artykuł MSDN] (http://msdn.microsoft.com/en-us/library/ms731064.aspx) – J0HN

Odpowiedz

9

W świecie WCF masz mniej więcej dwie opcje.

A) A Duplex service with Dual Http Binding

B) Schemat odpytywania bez powrotu wartość - jest to w zasadzie to, co opisane. Naiwna implementacja, jak słusznie zauważyłeś, nie jest zbyt dobra, ale istnieją optymalizacje. Ponieważ nie potrzebujesz niczego zwracanego z SendClientStatus (poprawne?), Możesz zoptymalizować komunikację, wysyłając aktualizację tylko wtedy, gdy jest ona dostępna - np. tak długo, jak status klienta pozostaje taki sam, nic nie jest wysyłane do serwera. W zależności od częstotliwości, z jaką zmienia się status klienta, może to znacznie zmniejszyć ruch. Usługi drukowania dwustronnego przedstawiają dodatkową konfigurację, której chcesz uniknąć, chyba że naprawdę ich potrzebujesz.

Powiązane problemy