Windows Service vs Service Worker

Windows Service vs Service Worker
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

Witam.
Czy zrobienie czegoś co by działało w tle na systemie Windows kończy się tylko na wyborze pomiędzy 20sto letnim Windows Service, a najnowszym .NET (Core) Service Worker? Tego drugiego zaleca się używać do jakiegoś backendu, a czy bez tego backendu zadziała jak zwykła usługa windows? Tutaj Microsoft pokazuje jak to skonfigurować. Nie mam za dużego doświadczenia w tego typu projektach i martwię się czy coś mnie może zaskoczyć, bo szczerze mówiąc nie chce wracać do .NET Framework i Windows Service. Czy konfiguracja wywołania jakiegoś zadania kończy się na Task.Delay(), da się wcisnąć w to jakiś timer np. Quartz? W tego typu usługach nie ma metod Start(), Stop(), nawet jakby chciał skonfigurować Quartza to przecież metoda ExecuteAsync będzie się w kółko wywoływać (po to jest ten delay na końcu).

Projekt będzie synchronizował dane pomiędzy system e-commerce, a Comarch Optima - kontrahentów, użytkowników, cennika, stanów magazynowych, kategorii, zamówień, aktualizacja statusów zamówień. Dobrze by było, aby synchronizacja zamówień, kontrahentów, cenników i stanów odbywała się asynchronicznie, aby nie trzeba było czekać, aż jedno skończy.

Czy to jest możliwe za pomocą Service Worker?

AdamWox
Cieszę się, że dałem troszkę rozrywki 😅
ZD
Kibicuję. Też mam do wycofania w którejś wersji stare Service
ZD
"Dobrze by było, aby synchronizacja zamówień, kontrahentów, cenników i stanów odbywała się asynchronicznie, aby nie trzeba było czekać, aż jedno skończy." to są bardzo ciezkie, choć nie na poziomie uniwersyteckiej algorytmiki, algorytmy. Mam jeden taki na produkcji. MUSI być jedynym w bazie, inaczej jest źle. Nie mogą się nakładać (przynajmniej te nasze), to by było ogromnie trudne do wszechstronnego zabezpieczenia.
AdamWox
W moim przypadku nakładanie nie ma znaczenia. Ewentualnie mogę połączyć w jeden "job" cennik i stany magazynowe. To co miałem na myśli to bardziej kwestie gdyby się nałożyły to żeby się wywołały w tym samym czasie. Obawiam się, że godziny synchronizacji będą konfigurowalne i mogą się różnić - stany mogą być częściej synchronizowane niż cenny, bo te drugie się tak często nie zmieniają.
GZ
  • Rejestracja:około 4 lata
  • Ostatnio:około rok
  • Postów:35
1

ExecuteAsync z klasy pochodnej BackgroundService wykonuje się tylko jeden raz.
W podanym przykładzie została napisana pętla, ale nie trzeba jej tam robić. Można tam napisać wywołanie Quartz.
Warto zastanowić się nad tym czy implementacja podobna do tej przedstawionej w linku nie będzie tą wystarczającą.

Odpowiadając na pierwsze pytanie: jest to dobry wybór jeśli chcemy stworzyć usługę Windows.

AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

No faktycznie jest pętla. Czyli jeśli wywalę while (!stoppingToken.IsCancellationRequested) to wywoła się tylko raz i tam mogę wrzucić konfigurację Quartza? Czy ten CancellationToken coś mi daje? W sensie, biorąc pod uwagę problem jaki próbuje rozwiązać.

AdamWox
Wow! Do tej pory Quartza używałem w WinForms i Windows Service, a tam takich cukierków nie ma. Genialne 👌
markone_dev
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 21 godzin
  • Postów:822
1

Nie wiem jakie masz wymagania odnośnie tego background joba, ale popatrz na Hangfire. Jeżeli potrzebujesz czegoś więcej niż tylko przenieś dane z A do B to Hangfire będzie twoim sprzymierzeńcem.


Programujący korpo architekt chmurowy.
Udzielam konsultacji i szkoleń w obszarze szeroko pojętego cloud computingu (Azure, AWS) i architektury systemów IT. Dla firm i prywatnie.
DevOps to proces nie stanowisko.
edytowany 1x, ostatnio: markone_dev
somekind
Mając takich sprzymierzeńców nie trzeba mieć wrogów.
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:11 minut
  • Lokalizacja:Poznań
  • Postów:8796
1

A tak w sumie - czy musi to być usługa? Nie możesz dodać jakiejś apki do autostartu, a potem - jak się odpali, to zrzucić do tray'a?


AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

No niby mogę, ale apka uruchomi się dopiero jak ktoś się zaloguje, a to będzie na serwerze gdzie mało kto zagląda.

cerrato
Tak, to jest słuszna uwaga
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

@markone_dev: Wydaje mi się, że do mojego projektu Hangfire to troszkę za dużo. Kiedyś musiałem zdecydować jakiego schedulera używać i, jeśli dobrze pamiętam, to Hangfire miał problem ze zwracaniem wartości, a potrzebowałem tego do jednego projektu.

markone_dev
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 21 godzin
  • Postów:822
1

Spoko. Dlatego napisałem żebyś się nim zainteresował bo może akurat będziesz miał use case'y gdzie by się sprawdził. Jeśli nie masz to tak jak piszesz, nie ma co go pchać tam na siłę :)


Programujący korpo architekt chmurowy.
Udzielam konsultacji i szkoleń w obszarze szeroko pojętego cloud computingu (Azure, AWS) i architektury systemów IT. Dla firm i prywatnie.
DevOps to proces nie stanowisko.
VA
  • Rejestracja:ponad 7 lat
  • Ostatnio:14 dni
1

Osobiście nie wiem co jest złego w serwisach i jeśli miałbym implementować coś do działa na windowsie w tle to rozważałbym je jako opcję.
Do serwisów polecam bibliotekę Topshelf - https://topshelf.readthedocs.io/
Bardzo łatwa konfiguracja

Kolejną opcją, jest task scheduler - można konfigurować zadania tak aby nie wymagały żadnego zalogowania się.

edytowany 2x, ostatnio: var
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2161
0

@var problem polega na tym, że chce mieć już jak najmniej wspólnego z .NET Framework. Jeśli rozwiązanie z Service Worker nie spełniło by moich oczekiwań/wymagań to bym był zmuszony użyć Windows Service. A się okazuje, że to świetne rozwiązanie, oprócz tego, że to .NET 6, to jeszcze ma build-in dependency injection, a debugowanie działa bez topshelf. Dodatkowo to co wrzucił @gosc_z_pytaniem na temat Quartza i konfiguracji w Program.cs dodatkowo ułatwiło konfiguracje całego projektu w kwestii niestandardowych ustawień wywołania konkretnych zadań.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.