Frontování ve WCF

Tato část popisuje, jak používat komunikaci ve frontě ve Windows Communication Foundation (WCF).

Fronty jako typ přenosové vazby WCF

V WCF kontrakty určují, co se vyměňuje. Smlouvy jsou výměny zpráv závislé na podnikání nebo specifické pro aplikaci. Mechanismus, jakým se vyměňují zprávy, je definován ve vazbách. Bindingy ve WCF zapozdřují podrobnosti o výměně zpráv. Zpřístupňují uživatelům konfigurační uzly, aby mohli řídit různé aspekty přenosu nebo protokolu, který vazby představují. Řazení front ve WCF je vnímáno jako jiná vazba pro transport, což je velká výhoda pro mnoho frontovacích aplikací. V současné době se mnoho frontovacích aplikací zapisuje odlišně od jiných distribuovaných aplikací ve stylu vzdáleného volání procedur (RPC), což ztěžuje jejich správu a údržbu. U WCF je styl zápisu distribuované aplikace velmi stejný, což usnadňuje sledování a údržbu. Kromě toho je jednodušší konfigurovat přenos nebo provést změny tím, že se mechanismus výměny oddělí od obchodní logiky, což umožňuje provádět úpravy bez dopadu na konkrétní kód aplikace. Následující obrázek znázorňuje strukturu služby WCF a klienta používající MSMQ jako přenos.

Diagram aplikace ve frontě

Jak vidíte na předchozím obrázku, klient a služba musí definovat pouze sémantiku aplikace, tj. kontrakt a implementaci. Služba nakonfiguruje řadovou vazbu s preferovaným nastavením. Klient používá nástroj ServiceModel Metadata Utility (Svcutil.exe) k vygenerování klienta WCF do služby a k vygenerování konfiguračního souboru, který popisuje vazby pro odesílání zpráv do služby. Klient tedy odešle zprávu ve frontě, vytvoří instanci klienta WCF a vyvolá na něm operaci. To způsobí, že se zpráva odešle do přenosové fronty a následně se přenese do cílové fronty. Všechny složitosti komunikace ve frontě jsou skryté v aplikaci, která odesílá a přijímá zprávy.

Mezi upozornění týkající se vázání do fronty ve WCF patří:

  • Všechny operace služby musí být jednosměrné, protože výchozí frontová vazba ve WCF nepodporuje duplexní komunikaci pomocí front. Obousměrná ukázka komunikace (Two-Way Komunikace) ukazuje, jak pomocí dvou jednosměrných kontraktů implementovat duplexní komunikaci pomocí front.

  • Ke generování klienta WCF pomocí výměny metadat je nutné přidat ve službě další koncový bod HTTP, který umožní přímý dotaz a vytvoření klienta WCF. Tím získáte informace o konfiguraci potřebné pro správně nakonfigurovanou komunikaci ve frontě.

  • Na základě frontové vazby je zapotřebí dodatečné nastavení mimo WCF. Například NetMsmqBinding třída dodávaná s WCF vyžaduje, abyste nakonfigurovali vazby i minimální konfiguraci služby Řízení front zpráv (MSMQ).

Následující části popisují konkrétní vazby ve frontě dodávané se službou WCF, které jsou založené na MSMQ.

služba MSMQ

Přenos ve frontě ve WCF používá msMQ pro svou komunikaci ve frontě.

MSMQ se dodává jako volitelná komponenta se systémem Windows a běží jako služba NT. Zaznamenává zprávy pro přenos ve frontě přenosu a pro doručování v cílové frontě. Správci front MSMQ implementují spolehlivý protokol přenosu zpráv, aby se zprávy při přenosu neztratily. Protokol může být nativní nebo založený na protokolu SOAP, například protokol SRMP (Reliable Message Protocol).

Ve službě MSMQ můžou být fronty transakční nebo ne-transakční. Transakční fronta umožňuje zachytávat a doručovat zprávy v transakci a pak ukládat trvale ve frontě. Zprávy odeslané do transakční fronty jsou přenášeny v přesném pořadí jednou. K odesílání nestálých i trvalých zpráv můžete použít netransakční frontu. Zpráva odeslaná do neaktuální fronty neobsahuje žádné spolehlivé záruky přenosu; zprávy tak mohou být ztraceny.

Fronty MSMQ je také možné zabezpečit pomocí identity systému Windows zaregistrované v adresářové službě Active Directory. Při instalaci nástroje MSMQ můžete nainstalovat integraci služby Active Directory, která vyžaduje, aby byl počítač součástí domény systému Windows.

Další informace o MSMQ naleznete v tématu Instalace služby Řízení front zpráv (MSMQ).

NetMsmqBinding

NetMsmqBinding< je typ vázání fronty, který WCF poskytuje pro dva koncové body, aby komunikovaly prostřednictvím MSMQ.> Vazba proto zveřejňuje vlastnosti specifické pro MSMQ. Ne všechny funkce a vlastnosti MSMQ jsou však vystaveny v souboru NetMsmqBinding. Kompaktní NetMsmqBinding je navržen s optimální sadou funkcí, které by většina zákazníků měla najít dostatečné.

NetMsmqBinding manifestuje základní koncepty frontování, které byly dosud probírány, ve formě vlastností na vazbách. Tyto vlastnosti pak komunikují s MSMQ, jak přenášet a doručovat zprávy. Diskuze o kategoriích vlastností je v následujících částech. Další informace najdete v koncepčních tématech, která podrobněji popisují konkrétní vlastnosti.

Vlastnosti ExactlyOnce a Durable Properties

Vlastnosti ExactlyOnce a Durable ovlivňují způsob přenosu zpráv mezi frontami:

  • ExactlyOnce: Pokud je nastavená hodnota true (výchozí), kanál ve frontě zajistí, že zpráva v případě doručení nebude duplikována. Zajišťuje také, že zpráva nebude ztracena. Pokud zprávu nelze doručit nebo zpráva Time-To Live vyprší před doručením zprávy, zpráva, která selhala, spolu s důvodem selhání doručení se zaznamená do fronty nedoručených zpráv. Pokud je tato možnost nastavená false, kanál zařazený do fronty se snaží zprávu přenést. V takovém případě můžete volitelně zvolit frontu nedoručených zpráv.

  • Durable: Pokud je nastavená hodnota true (výchozí), kanál zařazený do fronty zajistí, že MSMQ uloží zprávu trvale na disk. Proto pokud by byla služba MSMQ zastavena a znovu spuštěna, zprávy na disku se přenesou do cílové fronty nebo budou doručeny službě. Při nastavení falsejsou zprávy uloženy v nestálém úložišti a jsou ztraceny při zastavení a restartování služby MSMQ.

Aby byl ExactlyOnce přenos spolehlivý, MSMQ vyžaduje, aby fronta byla transakční. MSMQ vyžaduje také transakci ke čtení z transakční fronty. Proto, když používáte NetMsmqBinding, nezapomeňte, že transakce je nutná k odesílání nebo přijímání zpráv, pokud ExactlyOnce je nastavena na true. Podobně MSMQ vyžaduje, aby fronta byla netransakční pro zajištění maximální snahy, například když ExactlyOnce a false je využito pro nestálé zasílání zpráv. Proto při nastavení ExactlyOnce na false nebo trvale na false nelze odesílat ani přijímat pomocí transakce.

Poznámka:

Ujistěte se, že je vytvořena správná fronta (transakční nebo netransakční) na základě nastavení ve vazbách. Pokud ExactlyOnce je true, použijte transakční frontu, jinak použijte netransakční frontu.

vlastnosti fronty Dead-Letter

Fronta nedoručených zpráv se používá k ukládání zpráv, které nelze doručit. Uživatel může napsat kompenzační logiku, která čte zprávy z fronty nedoručených zpráv.

Mnoho systémů front poskytuje frontu nedoručených zpráv v rámci celého systému. MSMQ poskytuje systémovou ne-transakční frontu pro nedoručené zprávy, které selžou při doručení do ne-transakčních front, a systémovou transakční frontu pro nedoručené zprávy, které selžou při doručení do transakčních front.

Pokud více klientů, kteří odesílají zprávy do různých cílových front, sdílí službu MSMQ, všechny zprávy odeslané těmito klienty přejdou do stejné fronty nedoručených zpráv. To není vždy vhodnější. Pro lepší izolaci poskytuje WCF a MSMQ v systému Windows Vista vlastní frontu nedoručených zpráv (nebo frontu nedoručených zpráv specifickou pro aplikaci), kterou může uživatel zadat pro ukládání zpráv, které selžou doručení. Proto různí klienti nesdílí stejnou frontu pro nedoručené zprávy.

Vazba má dvě zajímavé vlastnosti:

  • DeadLetterQueue: Tato vlastnost je výčet, který označuje, zda je požadována fronta nedoručených zpráv. Výčet obsahuje také druh fronty nedoručených zpráv, pokud je požadován. Hodnoty jsou None, Systema Custom. Další informace o interpretaci těchto vlastností naleznete v tématu Použití front Dead-Letter ke zpracování chyb přenosu zpráv.

  • CustomDeadLetterQueue: Tato vlastnost je adresa URI (Uniform Resource Identifier) fronty nedoručených zpráv specifických pro aplikaci. To je vyžadováno, pokud DeadLetterQueue. Custom je vybrán.

Vlastnosti zpracování otrávené zprávy

Když služba čte zprávy z cílové fronty v rámci transakce, může dojít k selhání zpracování zprávy z různých důvodů. Zpráva se pak vrátí zpět do fronty, aby se znovu přečetla. Pokud chcete zpracovávat zprávy, které selhávají opakovaně, je možné v vazbě nakonfigurovat sadu vlastností zpracování jedových zpráv. Existují čtyři vlastnosti: ReceiveRetryCount, MaxRetryCycles, RetryCycleDelaya ReceiveErrorHandling. Další informace o těchto vlastnostech naleznete v tématu Zpracování chybných zpráv.

Vlastnosti zabezpečení

MSMQ zveřejňuje vlastní model zabezpečení, například seznamy řízení přístupu (ACL) ve frontě nebo odesílání ověřených zpráv. Tyto NetMsmqBinding vlastnosti zabezpečení zveřejňuje jako součást nastavení zabezpečení přenosu. V vazbě pro zabezpečení přenosu jsou dvě vlastnosti: MsmqAuthenticationMode a MsmqProtectionLevel. Nastavení v těchto vlastnostech závisí na tom, jak je služba MSMQ nakonfigurovaná. Další informace naleznete v tématu Zabezpečení zpráv pomocí zabezpečení přenosu.

Kromě zabezpečení přenosu je možné vlastní zprávu SOAP zabezpečit pomocí zabezpečení zpráv. Další informace naleznete v tématu Zabezpečení zpráv pomocí zabezpečení zpráv.

MsmqTransportSecurity také odhaluje dvě vlastnosti: MsmqEncryptionAlgorithm a MsmqHashAlgorithm. Jedná se o výčty různých algoritmů, které lze zvolit pro šifrování přenosu zpráv mezi frontami a hashování podpisů.

Další vlastnosti

Kromě předchozích vlastností zahrnují další vlastnosti specifické pro MSMQ zveřejněné v vazbě:

  • UseSourceJournal: Vlastnost označující, že je zdrojový deník zapnutý. Deníkování zdrojových dat je funkce MSMQ, která sleduje zprávy, které byly úspěšně přeneseny z přenosové fronty.

  • UseMsmqTracing: Vlastnost označující, že je zapnuté trasování MSMQ. Trasování MSMQ odesílá zprávy sestavy do fronty sestav pokaždé, když zpráva opustí nebo dorazí na počítač, který slouží jako hostitel správce fronty MSMQ.

  • QueueTransferProtocol: Protokol, který se má použít pro přenos zpráv mezi frontami. MSMQ implementuje nativní přenosový protokol fronty do fronty a protokol založený na SOAP s názvem SOAP Reliable Messaging Protocol (SRMP). SRMP se používá při použití přenosu HTTP pro přenosy mezi frontami. Zabezpečení SRMP se používá při použití protokolu HTTPS pro přenosy mezi frontami.

  • UseActiveDirectory: Logická hodnota označující, jestli musí být služba Active Directory použita pro rozlišení adres fronty. Ve výchozím nastavení je tato možnost vypnutá. Další informace najdete v tématu Koncové body služby a adresování front.

MsmqIntegrationBinding

Použije MsmqIntegrationBinding se, když chcete, aby koncový bod WCF komunikuje s existující aplikací MSMQ napsanou v rozhraních API C, C++, COM nebo System.Messaging.

Vlastnosti vazby jsou stejné jako u NetMsmqBinding. Platí však následující rozdíly:

  • Operační kontrakt MsmqIntegrationBinding je omezen na převzetí jednoho parametru typu MsmqMessage<T>, kde je parametr typu tělní typ.

  • Většina vlastností MSMQ nativních zpráv je vystavena v MsmqMessage<T> pro použití.

  • Pro pomoc se serializací a deserializací textu zprávy jsou k dispozici serializátory, jako je XML a ActiveX.

Ukázka kódu

Podrobné pokyny k zápisu služeb WCF, které používají MSMQ, najdete v následujících tématech:

Dokončený vzorový kód ilustrující použití MSMQ ve WCF najdete v následujících tématech:

Viz také