Pliki kolejek WCF i MSMQ: Gdzie są, do czego służą?
2026-08-26Zastanawiałeś się kiedyś, gdzie Windows magazynuje te wszystkie trwałe wiadomości i konfiguracje prywatnych kolejek WCF (Windows Communication Foundation), które są kluczowe dla diagnostyki komunikacji międzyprocesowej? No dobra, powiem ci coś – WCF samo w sobie nie przechowuje tych danych bezpośrednio w jakichś swoich magicznych plikach. Ono polega na starszym, ale jarym mechanizmie Windowsa: Microsoft Message Queuing (MSMQ). I to właśnie MSMQ jest prawdziwym bohaterem tej historii, chowającym swoje skarby w konkretnym miejscu na dysku. Pliki z wiadomościami i konfiguracją kolejek MSMQ (a więc i tych używanych przez WCF) znajdziesz głównie w folderze `C:\Windows\System32\msmq`. Dokładniej, wiadomości rezydują w podfolderze `storage`, a konfiguracja w `config`. Pliki wiadomości często mają rozszerzenia typu `.mq` (na przykład `lqs` dla lokalnych kolejek, `pqs` dla prywatnych), choć ich nazwy mogą być dość enigmatyczne, bo to po prostu identyfikatory GUID.
Co to jest MSMQ i do czego służy w kontekście WCF?
Wyobraź sobie, że masz dwie aplikacje, które muszą ze sobą gadać, ale nie zawsze mogą to robić w czasie rzeczywistym. Może jedna jest zajęta, może druga tymczasowo niedostępna, a ty nie chcesz, żeby twoje dane przepadły. I tu właśnie wjeżdżają kolejki komunikatów, a konkretnie MSMQ. To taka buforowa skrzynka pocztowa. Twoja aplikacja WCF wysyła wiadomość do kolejki, a potem idzie sobie spokojnie robić swoje. Inna aplikacja, w wolnej chwili, odbiera tę wiadomość z kolejki. Fajne, prawda? Zapewnia to niezawodność i trwałość komunikacji, bo wiadomości czekają, aż odbiorca będzie gotowy, nawet po restarcie systemu (bo są przecież zapisywane na dysku – stąd ten `storage`).
Kiedy mówimy o prywatnych kolejkach WCF, tak naprawdę mamy na myśli prywatne kolejki MSMQ. Są one lokalne dla danego komputera i nie są widoczne w Active Directory, w przeciwieństwie do kolejek publicznych. WCF wykorzystuje MSMQ jako jeden ze swoich *transportów* (a wiesz, WCF jest sprytne i potrafi używać też innych, jak choćby HTTP czy TCP, ale MSMQ jest super, gdy potrzebujesz gwarancji dostarczenia i pracy offline). Pliki, o których mówimy, są więc de facto bazą danych MSMQ.
Czy to wirus? Czy można go usunąć i co się stanie?
No dobra, a co, jeśli pokusi mnie, żeby te pliki w `msmq\storage` po prostu skasować? Przede wszystkim – to nie jest żaden wirus! MSMQ to integralna część systemu Windows (choć często jest to *opcjonalna* funkcja, którą trzeba doinstalować), a WCF to framework Microsoftu. To wszystko legitne komponenty.
Czy można usunąć? Technicznie, jeśli masz odpowiednie uprawnienia, mógłbyś spróbować usunąć pliki z tych folderów. Ale absolutnie tego nie rób, jeśli masz na komputerze jakiekolwiek aplikacje, które wykorzystują kolejki MSMQ (czyli również WCF z trwałymi kolejkami prywatnymi)! Skutki byłyby opłakane:
- Utrata danych: Wszystkie wiadomości czekające w kolejkach po prostu przepadną. Koniec tematu.
- Błędy aplikacji: Aplikacje WCF (i inne) korzystające z MSMQ przestaną działać poprawnie. Nie będą mogły wysyłać ani odbierać wiadomości, co może prowadzić do ich awarii, zawieszenia lub generowania nieprzewidzianych błędów.
- Niestabilność systemu: MSMQ to usługa systemowa. Manipulowanie jej plikami na żywca, bez zatrzymania usługi, może prowadzić do poważnych problemów z systemem operacyjnym.
Te pliki i foldery są traktowane jako systemowe i chronione właśnie dlatego, że są krytyczne dla funkcjonowania niektórych aplikacji i usług. Windows dba o to, żebyś przez przypadek nie uszkodził sobie systemu.
Typowe problemy i błędy związane z plikami i kolejkami MSMQ/WCF
Gdzie tu haczyk? Zazwyczaj problemy z kolejkami MSMQ/WCF wynikają z kilku typowych kwestii:
- Kolejka pełna: Jeśli kolejka ma ograniczony rozmiar (lub dysk, na którym się znajduje, jest pełny), nowe wiadomości nie mogą być dodawane. Zwykle objawia się to błędami typu `MessageQueueException` w aplikacji WCF.
- Brak uprawnień: Aplikacja próbująca wysłać lub odczytać wiadomość z kolejki może nie mieć odpowiednich uprawnień dostępu. To częsty błąd, zwłaszcza po wdrożeniu.
- Usługa MSMQ nie działa: Jeśli usługa „Message Queuing” w Menedżerze usług (services.msc) nie jest uruchomiona, żadne kolejki nie będą działać. No właśnie.
- Uszkodzone pliki kolejek: Czasem, rzadko bo rzadko, ale pliki w folderze `storage` mogą ulec uszkodzeniu, na przykład z powodu awarii zasilania. Wtedy MSMQ może mieć problem z odczytaniem danych.
- Konflikty konfiguracji: Niewłaściwa konfiguracja WCF lub MSMQ (np. nazwy kolejek, tryby transakcji) również może powodować błędy.
Diagnostykę zaczynamy od sprawdzenia usługi MSMQ, potem uprawnień do kolejek (można to zrobić z przystawki „Zarządzanie komputerem” -> „Usługi i aplikacje” -> „Kolejkowanie wiadomości”), a na końcu logów zdarzeń systemowych.
Dlaczego pliki są read-only lub systemowe?
Wspomniałem już o ochronie, ale dlaczego to takie ważne? Ponieważ te pliki przechowują stan aplikacji, który musi być trwały i spójny. Gdyby każdy program (albo użytkownik) mógł sobie ot tak zmieniać czy kasować te dane, cała koncepcja niezawodnej komunikacji by upadła. Windows chroni te pliki, aby zapewnić integralność systemu i działanie aplikacji, które na nich polegają. Bez tej ochrony, stabilność systemu byłaby zagrożona. Ot i cała filozofia. Zresztą, kto by chciał usuwać coś, co działa, prawda?
Najczęstsze pytania
Jak sprawdzić, czy MSMQ jest zainstalowane?
Otwórz „Panel sterowania” -> „Programy i funkcje” -> „Włącz lub wyłącz funkcje systemu Windows” i poszukaj „Kolejkowanie wiadomości (Microsoft Message Queue)”. Jeśli jest zaznaczone, to jest zainstalowane.
Czy można przenieść pliki kolejek MSMQ do innej lokalizacji?
Tak, jest to możliwe, ale wymaga to konfiguracji w rejestrze systemowym i zatrzymania usługi MSMQ. Zwykle nie jest to zalecane bez dobrego powodu i ostrożności.
Co zrobić, gdy kolejka jest pełna?
Możesz zwiększyć maksymalny rozmiar kolejki w jej właściwościach (przez „Zarządzanie komputerem”), usunąć stare wiadomości, albo rozważyć dodanie logiki do aplikacji, która szybciej przetwarza wiadomości lub obsługuje błędy przepełnienia.
