Sdílet prostřednictvím


Fronty ve WCF

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

Fronty jako přenosová vazba WCF

V WCF kontrakty určují, co se vyměňuje. Smlouvy jsou obchodní nebo aplikační výměny zpráv. Mechanismus používaný k výměně zpráv (nebo "how") je určen v vazbách. Vazby ve WCF zapouzdř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í. Řízení front ve WCF je považováno za jakoukoli jinou přenosovou vazbu, což je velká výhoda pro mnoho aplikací front. V současné době se mnoho aplikací front zapisuje odlišně od jiných distribuovaných aplikací vzdáleného volání procedur (RPC), což ztěžuje sledování 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šší nakonfigurovat přenos nebo provést změny, aniž by to ovlivnilo 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.

Queued Application Diagram

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 vazbu ve frontě s upřednostňovaným nastavením. Klient pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe) vygeneruje klienta WCF do služby a vygeneruje konfigurační soubor popisující vazby, které se používají k 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 fronty přenosu a přenese se 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 vazby ve frontě ve WCF patří:

  • Všechny operace služby musí být jednosměrné, protože výchozí vazba zařazená do fronty nepodporuje duplexní komunikaci pomocí front. Dvoucestná ukázka komunikace (Obousměrná komunikace) ukazuje, jak pomocí dvou jednosměrných kontraktů implementovat duplexní komunikaci pomocí front.

  • K vygenerování klienta WCF pomocí výměny metadat vyžaduje ve službě další koncový bod HTTP, aby se mohl dotazovat přímo na vygenerování klienta WCF a získání informací o vazbě pro správně nakonfigurovanou komunikaci ve frontě.

  • Na základě vazby ve frontě se vyžaduje extra konfigurace 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.

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 neaktuální. 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 se přenesou přesně jednou v pořadí. K odesílání nestálých i trvalých zpráv můžete použít neaktuální 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 fronta vazby> WCF poskytuje dva koncové body WCF ke komunikaci pomocí MSMQ. Vazba proto zveřejňuje vlastnosti specifické pro MSMQ. Ne všechny funkce a vlastnosti MSMQ jsou však vystaveny v souboru NetMsmqBinding. NetMsmqBinding Kompaktní je navržen s optimální sadou funkcí, které by většina zákazníků měla najít dostatečná.

Manifesty NetMsmqBinding základních konceptů řízení front probírané dosud ve formě vlastností vazeb. 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

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 vyprší platnost zprávy Time-To Live 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 byla služba MSMQ zastavena a restartována, zprávy na disku se přenesou do cílové fronty nebo doručí do služby. 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.

Pro ExactlyOnce spolehlivý přenos vyžaduje MSMQ, aby fronta byla transakční. MSMQ také vyžaduje transakci ke čtení z transakční fronty. Jako takové, když používáte NetMsmqBinding, nezapomeňte, že transakce je nutné odesílat nebo přijímat zprávy, pokud ExactlyOnce je nastavena na true. Podobně MSMQ vyžaduje, aby fronta byla neaktuální pro zajištění nejlepšího úsilí, jako je například kdy ExactlyOnce a false pro nestálé zasílání zpráv. Proto při nastavení ExactlyOnce nebo trvalé na falsefalse, nelze odesílat nebo přijímat pomocí transakce.

Poznámka:

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

Vlastnosti fronty nedoručených zpráv

Fronta nedoručených zpráv se používá k ukládání zpráv, které selžou. 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émově neaktektivní frontu nedoručených zpráv, které selžou doručení do neaktuální fronty, a frontu nedoručených zpráv do transakční fronty v rámci celého systému pro zprávy, které nedoručí do transakčních front.

Pokud více klientů odesílaných zpráv do různých cílových front sdílí službu MSMQ, všechny zprávy odeslané 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ílenou stejnou frontu nedoručených zpráv.

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 nedoručených zpráv 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 zvolen.

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

Když služba čte zprávy z cílové fronty v rámci transakce, může selhat 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í otrávené zprávy.

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é zveřejňuje dvě vlastnosti a MsmqEncryptionAlgorithmMsmqHashAlgorithm. Jedná se o výčty různých algoritmů, které se mají zvolit pro šifrování přenosu zpráv do fronty a hash 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í zdrojů je funkce MSMQ, která sleduje zprávy, které byly úspěšně přenášeny 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 sestavy pokaždé, když zpráva opustí nebo dorazí na počítač, který je hostitelem správce front MSMQ.

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

  • UseActiveDirectory: Logická hodnota označující, jestli musí být služba Active Directory použita pro překlad 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 vlastnosti vazby .NetMsmqBinding Platí však následující rozdíly:

  • Kontrakt MsmqIntegrationBinding operace je omezen na převzetí jednoho parametru typu MsmqMessage<T> , kde je parametr typu základní typ.

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

  • Pro pomoc se serializací a deserializací textu zprávy jsou k dispozici serializátory, jako je XML a technologie 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é