/ / Windows Service lub inna alternatywa - .net

Usługa systemu Windows lub jakakolwiek inna alternatywa - .net

Mam dylemat, czy skorzystać z usługi Windowsmoja aplikacja czy nie, poniżej znajduje się opis mojej aplikacji. Czy ktoś mógłby zasugerować, jakie jest najlepsze podejście do moich wymagań, jeśli to możliwe, również z zaletami i wadami.

Istnieje aplikacja „A”, która jest zamkniętaaplikacja i wszelkie dane, których potrzebuję z tej aplikacji, są ujawniane tylko za pośrednictwem usług WCF. Moja aplikacja „M” musi wywołać jedną z usług WCF widocznych jako „A”, a następnie pobrać dane, przetworzyć je i wyrzucić plik. Podobnie, jeśli jakiś plik zostanie wstrzyknięty do mojej aplikacji „M”, muszę go przetworzyć i przekazać te informacje do aplikacji „A” za pomocą usługi WCF. Jest to w skrócie wymóg.

problemy

1) Tutaj moja aplikacja „M” musi staleodpytaj aplikację wcf „A”, aby sprawdzić, czy coś jest dostępne do przetworzenia. Nie lubię ankiet, ale proszę o wszelkie inne alternatywy. Pomyślałem o MSMQ, że aplikacja „A” wysyła komunikat do mojej aplikacji „M” za każdym razem, gdy pojawiają się nowe dane. Moja aplikacja „M” przetwarza to z kolejki. Nie jestem pewien, jak to zrobić. Proszę doradzić, czy jest to właściwe podejście.

2) Inną sprawą jest pojawienie się nowego plikufolder serwera, a następnie moja aplikacja „M” musi go pobrać, przetworzyć i wysłać do aplikacji „A”. więc aby to osiągnąć, być może będę musiał mieć obserwatora systemu plików i jak tylko coś stanie się dostępne, to musi uruchomić moją aplikację. Znów uderzyło, jakiej technologii (tylko w .Net) użyć. Czy MSMQ jest najlepszym podejściem?

Więc teraz uderzyłem, w którą technologię (tylko w.Net) Muszę użyć, aby skutecznie spełnić moje wymagania. Czy usługa Windows jest najlepszym podejściem poprzez ciągłe sondowanie aplikacji „A” i wdrożenie wraz z nią MSMQ. Proszę doradź.

Z góry dziękuję
Sai

Odpowiedzi:

0 dla odpowiedzi № 1

W przypadku wymagania 1 użyłbym usługi WCF hostowanej za pośrednictwem usługi aktywacji procesów systemu Windows (WAS) - patrz Referencje MSDN. Wymaga to WAS (Windows Vista / 7 lub Windows Server 2008 / 2008R2), jednak jeśli nie są one dostępne, odpowiednia usługa zastępcza byłaby odpowiednia.

W przypadku wymagania 2 można zaimplementować usługę NT korzystającą z klasy FileSystemWatcher (Referencje MSDN).

Tak więc możesz zaimplementować pojedynczą usługę NT za pomocą FileSystemWatcher i wątek odpytywania, albo można zaimplementować zarówno usługę NT za pomocą FileSystemWatcher, jak i oddzielną usługę WCF hostowaną przez WAS, która nasłuchuje za pośrednictwem MSMQ.

Ta ostatnia jest być może nieco czystsza, ponieważ jest zgodna z zasadą rozdzielania obaw. Ale jest to możliwe tylko wtedy, gdy można skonfigurować aplikację „A” wysłać wiadomości za pośrednictwem MSMQ (tj., Twoja usługa „M” stałaby się „serwerem”, a aplikacja „A” działałaby jak klient). Tak więc poprzednia opcja (pojedyncza usługa NT do wykonania obu) może lepiej pasować do twojego scenariusza, ale nie jestem do końca pewien twojego opisu „A”.

Co do wysyłania wiadomości do aplikacji „A”, MSMQ może, ale nie musi byćodpowiedni wybór. Czy obie aplikacje są na tym samym komputerze? Następnie użyj nazwanych potoków. Czy są na różnych maszynach? Następnie użyj powiązania TCP, jeśli aplikacja „A” jest zawsze uruchomiona (tj. Działająca usługa), ale użyj powiązania MSMQ, jeśli potrzebujesz gwarantowanej dostawy wiadomości, a aplikacja „A” może czasami być offline, gdy aplikacja „M” wysyła to wiadomości. (Należy również pamiętać, że użycie MSMQ wymaga zainstalowania składnika Windows MSMQ na komputerze odbierającym.)


0 dla odpowiedzi nr 2

Wygląda na to, że opcja A jest niezmienna i dlatego nie można jej zmienić. ("Zamknięte")

Aplikacja M powinna być usługą systemu Windows, jakLars opisuje. Ale nigdy nie używaj obserwatora systemu plików, chyba że chcesz później zgrać kod i zastąpić go mechanizmem odpytywania. Najlepszym rozwiązaniem jest uruchomienie jednego wątku w celu odpytania aplikacji A, a drugiego w celu odpytania systemu plików.

W ankiecie nie ma nic złego. Użyj wątku.Śpij (10), a wszystko będzie dobrze. FileSystemWatcher często daje ci plik, który został „zmieniony”, ale nie zakończył zapisu. Powoduje to otrzymanie obciętego pliku.

Nie przejmuj się MSMQ, chyba że absolutnie potrzebujesz. Jest to po prostu kolejny element do utrzymania i nie mogę obsłużyć skomplikowanych operacji pobierania.