Tworzenie kolejek w programie WCF

W tej sekcji opisano sposób używania komunikacji w kolejce w programie Windows Communication Foundation (WCF).

Kolejki jako powiązanie transportu WCF

W programie WCF kontrakty określają, co jest wymieniane. Kontrakty są wymianami komunikatów zależnych od firmy lub aplikacji. Mechanizm używany do wymiany komunikatów (lub "jak") jest określony w powiązaniach. Powiązania w programie WCF hermetyzują szczegóły wymiany komunikatów. Uwidaczniają pokrętła konfiguracji dla użytkownika w celu kontrolowania różnych aspektów transportu lub protokołu reprezentowanego przez powiązania. Kolejkowanie w programie WCF jest traktowane jak każde inne powiązanie transportu, co jest dużą zaletą dla wielu aplikacji kolejkowania. Obecnie wiele aplikacji kolejek jest pisanych inaczej niż inne aplikacje rozproszone w stylu zdalnej procedury (RPC), co utrudnia śledzenie i konserwację. W programie WCF styl pisania aplikacji rozproszonej jest znacznie taki sam, co ułatwia śledzenie i konserwację. Ponadto poprzez uwzględnienie mechanizmu wymiany oddzielnie od logiki biznesowej łatwiej jest skonfigurować transport lub wprowadzić w nim zmiany bez wpływu na kod specyficzny dla aplikacji. Na poniższej ilustracji przedstawiono strukturę usługi WCF i klienta korzystającego z usługi MSMQ jako transportu.

Queued Application Diagram

Jak widać na powyższej ilustracji, klient i usługa muszą definiować tylko semantyka aplikacji, czyli kontrakt i implementacja. Usługa konfiguruje powiązanie w kolejce z preferowanymi ustawieniami. Klient używa narzędzia ServiceModel Metadata Tool (Svcutil.exe), aby wygenerować klienta WCF do usługi i wygenerować plik konfiguracji opisujący powiązania używane do wysyłania komunikatów do usługi. W związku z tym w celu wysłania komunikatu w kolejce klient tworzy wystąpienie klienta WCF i wywołuje na nim operację. Powoduje to wysłanie komunikatu do kolejki transmisji i przełączenie do kolejki docelowej. Wszystkie złożoności komunikacji w kolejce są ukryte przed aplikacją, która wysyła i odbiera komunikaty.

Zastrzeżenia dotyczące powiązania w kolejce w programie WCF obejmują:

  • Wszystkie operacje usługi muszą być jednokierunkowe, ponieważ domyślne powiązanie w kolejce w programie WCF nie obsługuje komunikacji dwukierunkowej przy użyciu kolejek. Przykład dwukierunkowej komunikacji (komunikacja dwukierunkowa) ilustruje sposób używania dwóch kontraktów jednokierunkowych do implementowania komunikacji dwukierunkowej przy użyciu kolejek.

  • Aby wygenerować klienta WCF przy użyciu wymiany metadanych, wymaga dodatkowego punktu końcowego HTTP w usłudze, aby można było wykonać zapytanie bezpośrednio w celu wygenerowania klienta programu WCF i uzyskania informacji o powiązaniu w celu odpowiedniego skonfigurowania komunikacji w kolejce.

  • Na podstawie powiązania w kolejce wymagana jest dodatkowa konfiguracja poza usługą WCF. Na przykład NetMsmqBinding klasa dostarczana z usługą WCF wymaga skonfigurowania powiązań, a także minimalnego skonfigurowania kolejkowania komunikatów (MSMQ).

W poniższych sekcjach opisano określone powiązania kolejkowane dostarczane z usługą WCF, które są oparte na usłudze MSMQ.

MSMQ

Transport w kolejce w programie WCF używa usługi MSMQ do komunikacji w kolejce.

Usługa MSMQ jest dostarczana jako składnik opcjonalny z systemem Windows i działa jako usługa NT. Przechwytuje komunikaty do transmisji w kolejce transmisji i do dostarczania w kolejce docelowej. Menedżerowie kolejek MSMQ implementują niezawodny protokół transferu komunikatów, dzięki czemu komunikaty nie zostaną utracone w transmisji. Protokół może być natywny lub oparty na protokole SOAP, taki jak protokół SOAP Reliable Message Protocol (SRMP).

W msMQ kolejki mogą być transakcyjne lub nie transakcyjne. Kolejka transakcyjna umożliwia przechwytywanie i dostarczanie komunikatów w transakcji, a następnie przechowywane trwale w kolejce. Komunikaty wysyłane do kolejki transakcyjnej są przesyłane dokładnie raz w kolejności. Do wysyłania komunikatów nietrwałych i trwałych można użyć kolejki nie transakcyjnej. Komunikat wysyłany do kolejki nie transakcyjnej nie ma żadnych niezawodnych gwarancji transferu; w związku z tym komunikaty mogą zostać utracone.

Kolejki MSMQ można również zabezpieczyć przy użyciu tożsamości systemu Windows zarejestrowanej w usłudze katalogowej Active Directory. Podczas instalowania programu MSMQ można zainstalować integrację usługi Active Directory, która wymaga, aby komputer był częścią sieci domeny systemu Windows.

Aby uzyskać więcej informacji na temat msMQ, zobacz Instalowanie kolejkowania komunikatów (MSMQ).

Netmsmqbinding

NetMsmqBinding ><jest powiązaniem w kolejce WCF zapewnia dwa punkty końcowe WCF do komunikacji przy użyciu msMQ. Powiązanie uwidacznia zatem właściwości specyficzne dla usługi MSMQ. Jednak nie wszystkie funkcje i właściwości MSMQ są uwidocznione w pliku NetMsmqBinding. NetMsmqBinding Kompaktowa jest zaprojektowana z optymalnym zestawem funkcji, które większość klientów powinna znaleźć wystarczająco dużo.

Manifestuje NetMsmqBinding podstawowe pojęcia kolejkowania omówione do tej pory w postaci właściwości powiązań. Te właściwości z kolei komunikują się z usługą MSMQ, jak przesyłać i dostarczać komunikaty. Omówienie kategorii właściwości znajduje się w poniższych sekcjach. Aby uzyskać więcej informacji, zobacz tematy koncepcyjne, które opisują bardziej szczegółowo określone właściwości.

DokładnieOnce i trwałe właściwości

Właściwości ExactlyOnce i Durable wpływają na sposób przesyłania komunikatów między kolejkami:

  • ExactlyOnce: Po ustawieniu wartości true (wartość domyślna) kanał w kolejce gwarantuje, że komunikat, jeśli zostanie dostarczony, nie zostanie zduplikowany. Gwarantuje również, że komunikat nie zostanie utracony. Jeśli nie można dostarczyć komunikatu lub komunikat Time-To Live wygaśnie przed dostarczeniem wiadomości, komunikat zakończony niepowodzeniem wraz z przyczyną niepowodzenia dostarczania jest rejestrowany w kolejce utraconych komunikatów. Gdy jest ustawiona wartość false, kanał w kolejce podejmuje próbę przeniesienia komunikatu. W takim przypadku możesz opcjonalnie wybrać kolejkę utraconych komunikatów.

  • Durable: Po ustawieniu wartości true (wartość domyślna) kanał w kolejce gwarantuje, że usługa MSMQ będzie przechowywać komunikat trwale na dysku. W związku z tym, jeśli usługa MSMQ miała zatrzymać i ponownie uruchomić, komunikaty na dysku są przesyłane do kolejki docelowej lub dostarczane do usługi. Po ustawieniu falsewartości na wartość komunikaty są przechowywane w magazynie nietrwałym i są tracone podczas zatrzymywania i ponownego uruchamiania usługi MSMQ.

W celu ExactlyOnce zapewnienia niezawodnego transferu usługa MSMQ wymaga, aby kolejka byłaby transakcyjna. Ponadto usługa MSMQ wymaga transakcji do odczytu z kolejki transakcyjnej. W związku z tym w przypadku korzystania z NetMsmqBindingelementu należy pamiętać, że transakcja jest wymagana do wysyłania lub odbierania komunikatów, gdy ExactlyOnce jest ustawiona wartość true. Podobnie usługa MSMQ wymaga, aby kolejka nie byłaby transakcyjna w celu zapewnienia najlepszych wysiłków, takich jak kiedy ExactlyOnce jest false i w przypadku nietrwałych komunikatów. W związku z tym podczas ustawiania ExactlyOnce wartości na false lub trwałej falsenie można wysyłać ani odbierać przy użyciu transakcji.

Uwaga

Upewnij się, że utworzono prawidłową kolejkę (transakcyjną lub nie transakcyjną) na podstawie ustawień w powiązaniach. Jeśli ExactlyOnce ma truewartość , użyj kolejki transakcyjnej; w przeciwnym razie użyj kolejki nie transakcyjnej.

Właściwości kolejki utraconych komunikatów

Kolejka utraconych komunikatów służy do przechowywania komunikatów, które kończą się niepowodzeniem. Użytkownik może napisać logikę wyrównywczą, która odczytuje komunikaty z kolejki utraconych komunikatów.

Wiele systemów kolejkowania zapewnia kolejkę utraconych komunikatów dla całego systemu. Usługa MSMQ zapewnia kolejkę komunikatów, które nie są transakcyjne, dla komunikatów, które nie są dostarczane do kolejek nie transakcyjnych, oraz kolejki komunikatów, które kończą się niepowodzeniem dostarczania do kolejek transakcyjnych na całym systemie.

Jeśli wielu klientów wysyłających komunikaty do różnych kolejek docelowych współużytkuje usługę MSMQ, wszystkie komunikaty wysyłane przez klientów przechodzą do tej samej kolejki utraconych komunikatów. To nie zawsze jest preferowane. Aby uzyskać lepszą izolację, usługi WCF i MSMQ w systemie Windows Vista zapewniają niestandardową kolejkę utraconych komunikatów (lub kolejkę utraconych komunikatów specyficznych dla aplikacji), którą użytkownik może określić do przechowywania komunikatów, które kończą się niepowodzeniem. W związku z tym różni klienci nie współużytkują tej samej kolejki utraconych komunikatów.

Powiązanie ma dwie interesujące właściwości:

Właściwości obsługi komunikatów otrutych

Gdy usługa odczytuje komunikaty z kolejki docelowej w ramach transakcji, usługa może nie przetworzyć komunikatu z różnych powodów. Komunikat zostanie następnie ponownie odczytany w kolejce. Aby wielokrotnie radzić sobie z komunikatami, które kończą się niepowodzeniem, w powiązaniu można skonfigurować zestaw właściwości obsługi komunikatów o truciznie. Istnieją cztery właściwości: ReceiveRetryCount, , MaxRetryCyclesRetryCycleDelayi ReceiveErrorHandling. Aby uzyskać więcej informacji na temat tych właściwości, zobacz Obsługa komunikatów zatrutych.

Właściwości zabezpieczeń

Usługa MSMQ uwidacznia własny model zabezpieczeń, taki jak listy kontroli dostępu (ACL) w kolejce lub wysyłanie uwierzytelnionych komunikatów. Element NetMsmqBinding uwidacznia te właściwości zabezpieczeń w ramach ustawień zabezpieczeń transportu. Istnieją dwie właściwości powiązania zabezpieczeń transportu: MsmqAuthenticationMode i MsmqProtectionLevel. Ustawienia w tych właściwościach zależą od sposobu konfigurowania usługi MSMQ. Aby uzyskać więcej informacji, zobacz Zabezpieczanie komunikatów przy użyciu zabezpieczeń transportu.

Oprócz zabezpieczeń transportu rzeczywisty komunikat PROTOKOŁU SOAP można zabezpieczyć przy użyciu zabezpieczeń komunikatów. Aby uzyskać więcej informacji, zobacz Zabezpieczanie komunikatów przy użyciu zabezpieczeń komunikatów.

MsmqTransportSecurity uwidacznia również dwie właściwości i MsmqEncryptionAlgorithmMsmqHashAlgorithm. Są to wyliczenia różnych algorytmów do wyboru na potrzeby szyfrowania transferu kolejek do kolejki komunikatów i tworzenia skrótów podpisów.

Inne właściwości

Oprócz powyższych właściwości, inne właściwości specyficzne dla msMQ uwidocznione w powiązaniu obejmują:

  • UseSourceJournal: właściwość wskazująca, że dziennik źródłowy jest włączony. Dziennik źródłowy to funkcja MSMQ, która śledzi komunikaty, które zostały pomyślnie przesłane z kolejki transmisji.

  • UseMsmqTracing: właściwość wskazująca, że śledzenie MSMQ jest włączone. Śledzenie MSMQ wysyła komunikaty raportów do kolejki raportów za każdym razem, gdy komunikat opuszcza lub dociera do maszyny obsługującej menedżera kolejek MSMQ.

  • QueueTransferProtocol: Wyliczenie protokołu do użycia na potrzeby transferów komunikatów kolejki do kolejki. Usługa MSMQ implementuje natywny protokół transferu kolejki do kolejki i protokół oparty na protokole SOAP o nazwie SOAP Reliable Messaging Protocol (SRMP). Protokół SRMP jest używany podczas korzystania z transportu HTTP do transferów kolejek do kolejki. Protokół SRMP secure jest używany podczas używania protokołu HTTPS do transferów kolejek do kolejki.

  • UseActiveDirectory: wartość logiczna wskazująca, czy usługa Active Directory musi być używana do rozpoznawania adresów kolejki. Domyślnie jest to wyłączone. Aby uzyskać więcej informacji, zobacz Service Endpoints and Queue Addressing (Punkty końcowe usługi i adresowanie kolejki).

Msmqintegrationbinding

Jest MsmqIntegrationBinding używany, gdy punkt końcowy programu WCF ma komunikować się z istniejącą aplikacją MSMQ napisaną w interfejsach API języka C, C++, COM lub System.Messaging.

Właściwości powiązania są takie same jak w przypadku NetMsmqBindingelementu . Obowiązują jednak następujące różnice:

  • Kontrakt operacji dla MsmqIntegrationBinding programu jest ograniczony do przyjmowania pojedynczego parametru typu MsmqMessage<T> , w którym parametr typu jest typem treści.

  • Wiele właściwości komunikatów natywnych MSMQ jest uwidocznionych w MsmqMessage<T> celu użycia.

  • Aby ułatwić serializacji i deserializacji treści komunikatu, udostępniane są serializatory, takie jak XML i ActiveX.

Przykładowy kod

Aby uzyskać instrukcje krok po kroku dotyczące pisania usług WCF korzystających z usługi MSMQ, zobacz następujące tematy:

Aby zapoznać się z ukończonym przykładem kodu ilustrującym użycie funkcji MSMQ w programie WCF, zobacz następujące tematy:

Zobacz też