2010-03-16 9 views
5

Muszę wdrożyć pewien mechanizm komunikacji w mojej aplikacji, aby wysyłać powiadomienia/wiadomości z jednej instancji aplikacji do wszystkich innych. Jest to normalny scenariusz, w którym ktoś dodaje i element lub usuwa oraz element i chcesz powiadomić innych użytkowników, że tak się stało.Wiadomości w sieci lokalnej z .NET

Aplikacja działa na kliencie i łączy się z bazą danych w sieci lokalnej. Zatem nie jest tak, że wszyscy klienci uzyskują dostęp do instancji serwera aplikacji. Więc z tego, co wiem, mogę użyć MessageQueues lub jakiejś formy pollingu bazy danych, gdzie mam tabelę, która przechowuje wszystkie wiadomości (nie jest idealna).

Problem jest potrzebne do realizacji tego bardzo szybko, więc niestety nie mogę iść bardzo skomplikowane, ale trzeba najszybszą najłatwiejsze rozwiązanie.

dzięki za pomoc!

Odpowiedz

2

Wygląda na to, że korzystanie z optymistycznej współbieżności może być łatwiejsze. Załóżmy, że rzeczy nie będą usuwane i radzimy sobie z nimi w zainfekowanym kliencie, kiedy to się stanie, co powinno być łatwiejsze niż stworzenie jakiegoś współbieżnego systemu powiadomień, który nie skaluje się w ogóle ...

Poza tym, jeśli lista klientów jest mała, polling na db to najłatwiejszy sposób na zrobienie tego bez dodawania kolejnej warstwy komunikacji do twojego systemu, wystarczy dodać tabelę i zaimplementować bibliotekę klas dla wszystkich, aby zrobić coś na rzeczy, jeśli masz dostęp do DB, jesteś w stanie aby dowiedzieć się o usuniętych elementach itp.

+0

Tak, myślałem o optymistycznej współbieżności, ale to nie jest opcja dla mnie, ponieważ muszę powiadomić użytkowników, gdy zostanie wstawiony nowy element (w ciągu kilku sekund od tego zdarzenia). Dodawanie całej warstwy wiadomości nie jest idealne, ale pozwoliłoby mi na jej intensywne używanie w systemie. Problem jest w mojej aplikacji testowej Dostaję problemy z MSMQ - Domain ... więc pomyśl o sondowaniu, chyba że są inne opcje. – Richard

+0

MSMQ to pies. "Prawidłowy" sposób na zrobienie tego jest prawdopodobnie czymś w rodzaju systemu publikowania/subskrybowania, do którego można się zgłosić lub znaleźć kilka bibliotek. Wiem, że SQL Server Service Broker ma kilka funkcji powiadamiania, które mogą pasować do twoich celów (jest to kolejka wiadomości w SQL, przeznaczona dla przechowywanych procesów, aby powiadomić inne jednostki, że coś się zmieniło). – Spence

+0

Cóż, MSMQ i wszystkie inne opcje zajęłyby zbyt dużo czasu, więc zaimplementowałem je już za pomocą odpytywania. Właśnie utworzyłem tabelę, odpytuję ją co N sekund, a następnie, jeśli jest tam wiadomość dla tego użytkownika, przeczytaj ją i przetwórz, a następnie usuń tę wiadomość. I gdziekolwiek chcesz, po prostu utwórz wiadomość w tabeli dla każdego użytkownika. Kiedy użytkownik się loguje, upewnij się, że wszystkie wiadomości są usuwane, aby nie dostał 100 wiadomości, gdy się loguje. Wszystko to jest bardzo proste, ale działa tak, jak potrzebuję w naszym małym systemie. Dzięki. – Richard

0

Może chcesz sprawdzić moje blogu here, który omawia możliwą realizację zdarzeń agregatora cross-procesowej.

0

Wierzę, że można to zrobić za pomocą WCF. Ma powiązanie z komunikacją peer to peer.

0

myślę przeszukiwania db będzie Twój najszybsza trasa. Coś naprawdę prostego, kiedy tabela ma modyfikację, przechowuje czas, jaki wydarzył się w innej tabeli, przy użyciu wyzwalacza jest jednym ze sposobów, aby to zrobić.

Klienci kwerendy tej tabeli i porównać tam lokalnie przechowywanych zmodyfikowany czas, jeśli czas db jest nowszy następnie odśwież.

Wszystko, co może być bardziej skomplikowane ... szczególnie w przypadku wymogu "kilku sekund".

Można zaimplementować to wszystko w sposób, który mógłby zastąpić bardziej metody ciężkiej później w razie potrzeby.

+0

Tak, to jest droga, którą podjąłem. Jak mówisz, tak długo, jak jest to zrobione w sposób, który pozwala na przedłużenie jego ok. Ale na razie nie mogę przewidzieć, że musi to być coś bardziej złożonego. – Richard

0

zależności od topologii sieci naturalnym wyborem byłoby przekazem (same podsieci) lub multicast na wiele podsieci, gdy dodaje coś nowego.
Emisje są raczej proste do zaprogramowania, ale musisz najpierw sprawdzić, czy są dozwolone w Twojej sieci.

0

Najpierw należy badać gniazda programowania w C# otwórz te linki: http://www.codeproject.com/Articles/10649/An-Introduction-to-Socket-Programming-in-NET-using

http://socketprogramming.blogspot.com/

obok jeśli u Ra deweloperem C# będzie łatwo to zrobić.

+0

Należy zauważyć, że [odpowiedzi dotyczące tylko łącza] (http://meta.stackoverflow.com/tags/link-only-answers/info) są odradzane, odpowiedzi na pytania powinny być punktem końcowym wyszukiwania rozwiązania (vs. jeszcze jeden przystanek referencji, które z czasem zanikają). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. –

Powiązane problemy