Korelace – přehled
Korelace je mechanismus pro vzájemné propojení zpráv služby pracovního postupu nebo stavu instance aplikace, jako je odpověď na počáteční požadavek nebo konkrétní ID objednávky na trvalý stav pracovního postupu zpracování objednávek. Toto téma obsahuje přehled korelace. Další témata v této části obsahují další informace o jednotlivých typech korelace.
Typy korelace
Korelace může být založená na protokolu nebo na obsahu. Korelace založené na protokolu používají data poskytovaná infrastrukturou doručování zpráv k zajištění mapování mezi zprávami. Zprávy, které korelují pomocí korelace založené na protokolu, spolu souvisejí pomocí objektu v paměti, například RequestContexttokenu poskytnutého přenosového protokolu. Korelace založené na obsahu vzájemně souvisejí se zprávami pomocí dat zadaných aplikací. Zprávy, které korelují pomocí korelace založené na obsahu, vzájemně souvisí s některými daty definovanými aplikací ve zprávě, jako je číslo zákazníka.
Aktivity, které se účastní korelace, používají CorrelationHandle k vzájemnému propojení aktivit zasílání zpráv. Například Send , který se používá k volání služby a následný Receive , který se používá k přijetí zpětného volání ze služby, sdílet stejné CorrelationHandle. Tento základní vzor se používá bez ohledu na to, jestli je korelace založená na obsahu nebo protokolu. Popisovač korelace může být explicitně nastaven pro každou aktivitu nebo aktivity mohou být obsaženy v aktivitě CorrelationScope . Aktivity obsažené v CorrelationScope korelaci jsou spravovány CorrelationScope a nevyžadují CorrelationHandle explicitní nastavení. Obor CorrelationScope poskytuje CorrelationHandle správu pro korelaci odpovědí na žádost a jeden další typ korelace. Služby pracovních postupů hostované pomocí WorkflowServiceHost mají stejnou výchozí správu korelací jako CorrelationScope aktivita. Tato výchozí správa korelací obecně znamená, že v mnoha scénářích nevyžadují aktivity zasílání zpráv ve CorrelationScope službě nebo ve službě pracovního postupu jejich CorrelationHandle sadu, pokud není paralelně nebo překrývají více aktivit, jako jsou dvě Receive paralelní aktivity, nebo dvě Send aktivity následované dvěma Receive aktivitami. Další informace o výchozí korelaci najdete v tématech v této části, která pokrývají každý konkrétní typ korelace. Další informace o aktivitách zasílání zpráv naleznete v tématu Aktivity zasílání zpráv a Postupy: Vytvoření služby pracovního postupu s aktivitami zasílání zpráv.
Korelace založená na protokolu
Korelace založená na protokolu používá transportní mechanismus k vzájemnému propojení zpráv a příslušné instance. Mezi systémové korelace protokolů patří korelace odpovědí na požadavky a korelace založená na kontextu. Korelace odpovědí na požadavek se používá ke korelaci jedné dvojice aktivit zasílání zpráv za účelem vytvoření obousměrné operace, například Send spárované s nebo ReceiveReplyReceive spárované s SendReply. Návrhář pracovních postupů sady Visual Studio poskytuje také sadu šablon aktivit pro rychlou implementaci tohoto modelu. Korelace založená na kontextu je založená na mechanismu výměny kontextu popsaném ve specifikaci protokolu .NET Context Exchange Protocol. Pokud chcete použít korelaci založenou na kontextu, musí být v koncovém bodu použita kontextová vazba, například BasicHttpContextBindingWSHttpContextBindingNetTcpContextBinding nebo musí být použita.
Další informace o korelaci protokolu naleznete v tématu Durable Duplex a Request-Reply. Další informace o používání šablon aktivit Návrháře pracovních postupů sady Visual Studio naleznete v tématu Aktivity zasílání zpráv. Ukázkový kód najdete v ukázce NetContextExchangeCorrelation .
Korelace na základě obsahu
Korelace založená na obsahu používá některé informace ve zprávě k přidružení k určité instanci. Na rozdíl od korelace založené na protokolu vyžaduje korelace založená na obsahu, aby autor aplikace explicitně uvedl, kde se tato data dají najít v každé související zprávě. Aktivity, které používají korelaci založenou na obsahu, určují tato data zpráv pomocí MessageQuerySet. Korelace založená na obsahu je užitečná při komunikaci se službami, které nepoužívají jednu z kontextových vazeb, například BasicHttpContextBinding.