Übersicht über die Korrelation

Die Korrelation ist der Mechanismus zum Verknüpfen von Workflowdienstnachrichten miteinander oder mit dem Anwendungsinstanzzustand. Dies kann z. B. eine Antwort auf eine ursprüngliche Anforderung oder eine bestimmte Bestell-ID mit dem beibehaltenen Zustand eines Workflows zur Bestellverarbeitung sein. Dieses Thema enthält eine Übersicht über die Korrelation: Die anderen Themen in diesem Abschnitt enthalten weitere Informationen zu den einzelnen Korrelationstypen.

Korrelationstypen

Die Korrelation kann protokollbasiert oder inhaltsbasiert sein. Protokollbasierte Korrelationen verwenden von der Nachrichtenübermittlungsinfrastruktur bereitgestellte Daten für die Zuordnung zwischen Nachrichten. Nachrichten, die mithilfe der protokollbasierten Korrelation korreliert werden, werden unter Verwendung eines Objekts im Arbeitsspeicher, z. B. RequestContext, oder mit einem vom Transportprotokoll bereitgestellten Token miteinander verknüpft. Bei inhaltsbasierten Korrelationen werden Nachrichten miteinander verknüpft, indem von Anwendungen angegebene Daten verwendet werden. Nachrichten, die mithilfe der inhaltsbasierten Korrelation korreliert werden, werden miteinander verknüpft, indem von der Anwendung definierte Daten in der Nachricht verwendet werden, z. B. eine Kundennummer.

Aktivitäten, die Teil einer Korrelation sind, verwenden CorrelationHandle zum Verknüpfen der Messagingaktivitäten. Das Send-Objekt, das zum Aufrufen eines Diensts verwendet wird, und das darauffolgende Receive-Objekt, mit dem ein Rückruf vom Dienst empfangen wird, verwenden beispielsweise gemeinsam das CorrelationHandle-Objekt. Dieses grundlegende Muster wird unabhängig davon verwendet, ob die Korrelation inhaltsbasiert oder protokollbasiert erfolgt. Das Korrelationshandle kann für jede Aktivität explizit festgelegt werden, oder die Aktivitäten können in einer CorrelationScope-Aktivität enthalten sein. Die Korrelationshandles von in CorrelationScope enthaltenen Aktivitäten werden mithilfe von CorrelationScope verwaltet und erfordern keine explizite Festlegung von CorrelationHandle. Ein CorrelationScope-Bereich stellt die CorrelationHandle-Verwaltung für eine Anforderung-Antwort-Korrelation und einen zusätzlichen Korrelationstyp bereit. Mit WorkflowServiceHost gehostete Workflowdienste nutzen die gleiche standardmäßige Korrelationsverwaltung wie die CorrelationScope-Aktivität. Diese standardmäßige Korrelationsverwaltung bedeutet im Allgemeinen, dass Messagingaktivitäten in vielen Szenarios in einem CorrelationScope oder einem Workflowdienst es nicht erfordern, dass CorrelationHandle festgelegt ist. Dies ist nur erforderlich, wenn mehrere Messagingaktivitäten parallel ausgeführt werden oder sich überschneiden, z. B. zwei parallele Receive-Aktivitäten oder zwei Send-Aktivitäten gefolgt von zwei Receive-Aktivitäten. Weitere Informationen zur Standardkorrelation finden Sie in den Themen zu den einzelnen Korrelationstypen in diesem Abschnitt. Weitere Informationen zu Messagingaktivitäten finden Sie unter Messagingaktivitäten und Erstellen eines Workflowdiensts mit Messagingaktivitäten.

Protokollbasierte Korrelation

Die protokollbasierte Korrelation verwendet den Transportmechanismus, um Nachrichten miteinander und mit der entsprechenden Instanz zu verknüpfen. Einige vom System bereitgestellte Protokollkorrelationen enthalten die Anforderung-Antwort-Korrelation und die kontextbasierte Korrelation. Eine Anforderung-Antwort-Korrelation zum Korrelieren eines einzelnen Paars von Messagingaktivitäten verwendet, um einen bidirektionalen Vorgang zu erstellen. Beispiele hierfür sind Send gepaart mit ReceiveReply oder Receive gepaart mit SendReply. Der Visual Studio-Workflow-Designer stellt auch Aktivitätsvorlagen bereit, mit denen dieses Muster schnell implementiert werden kann. Eine kontextbasierte Korrelation basiert auf dem Kontextaustauschmechanismus, der in der Spezifikation zum .NET-Kontextaustauschprotokoll beschrieben wird. Zum Verwenden der kontextbasierten Korrelation muss auf dem Endpunkt eine kontextbasierte Bindung wie BasicHttpContextBinding, WSHttpContextBinding oder NetTcpContextBinding verwendet werden.

Weitere Informationen zur Protokollkorrelation finden Sie unter Permanenter Duplex und Anforderung-Antwort. Weitere Informationen zur Verwendung der Aktivitätsvorlagen von Visual Studio-Workflow-Designer finden Sie unter Messagingaktivitäten. Beispielcode finden Sie im Beispiel NetContextExchangeCorrelation.

Inhaltsbasierte Korrelation

Bei der inhaltsbasierten Korrelation wird ein bestimmtes Informationselement in der Nachricht verwendet, um diese einer bestimmten Instanz zuzuordnen. Im Gegensatz zur protokollbasierten Korrelation erfordert die inhaltsbasierte Korrelation es, dass der Anwendungsautor explizit angibt, wo sich diese Daten in den einzelnen verknüpften Nachrichten befinden. Aktivitäten, die die inhaltsbasierte Korrelation verwenden, geben diese Nachrichtendaten mit einem MessageQuerySet-Objekt an. Die inhaltsbasierte Korrelation ist bei der Kommunikation mit Diensten nützlich, die keine Kontextbindung verwenden, z. B. BasicHttpContextBinding.

Siehe auch