Panoramica della correlazione

La correlazione è il meccanismo che consente di correlare i messaggi del servizio flusso di lavoro l'uno all'altro o allo stato dell'istanza dell'applicazione, ad esempio una risposta a una richiesta iniziale o un particolare ID dell'ordine allo stato persistente di un flusso di lavoro di elaborazione di un ordine. In questo argomento vengono forniti cenni preliminari sulla correlazione. Gli altri argomenti in questa sezione forniscono informazioni aggiuntive per ogni tipo di correlazione.

Tipi di correlazione

La correlazione può essere basata sul protocollo o sul contenuto. Le correlazioni basate sul protocollo usano dati forniti dall'infrastruttura di recapito dei messaggi per fornire il mapping tra messaggi. I messaggi correlati mediante la correlazione basata sul protocollo vengono correlati l'uno all'altro mediante un oggetto in memoria, ad esempio RequestContext, o per mezzo di un token fornito dal protocollo di trasporto. Le correlazioni basate sul contenuto correlano messaggi l'uno all'altro usando dati specificati dall'applicazione. I messaggi correlati usando la correlazione basata sul contenuto vengono correlati l'uno all'altro per mezzo di alcuni dati definiti dall'applicazione nel messaggio, ad esempio un numero cliente.

Le attività che partecipano alla correlazione usano un elemento CorrelationHandle per associare le attività di messaggistica. Un elemento Send usato per chiamare un servizio e un elemento Receive successivo usato per ricevere un callback dal servizio condividono ad esempio lo stesso elemento CorrelationHandle. Questo modello di base viene usato se la correlazione è basata sul contenuto o sul protocollo. È possibile impostare l'handle di correlazione in modo esplicito in ogni attività oppure le attività possono essere contenute in un'attività CorrelationScope. Nelle attività contenute in un elemento CorrelationScope gli handle di correlazione vengono gestiti da CorrelationScope e non richiedono l'impostazione esplicita di CorrelationHandle. Un ambito CorrelationScope fornisce la gestione di CorrelationHandle per una correlazione request/reply e un tipo di correlazione aggiuntivo. I servizi flusso di lavoro ospitati mediante WorkflowServiceHost dispongono della stessa gestione di correlazione predefinita dell'attività CorrelationScope. In genere con questa gestione di correlazione predefinita molti scenari, attività di messaggistica in un CorrelationScope o un servizio flusso di lavoro non richiedono l'impostazione del rispettivo elemento CorrelationHandle, a meno che più attività di messaggistica siano in parallelo o si sovrappongano, ad esempio due attività Receive in parallelo o due attività Send seguite da due attività Receive. Negli argomenti di questa sezione che analizzano ogni tipo specifico di correlazione vengono fornite altre informazioni sulla correlazione predefinita. Per altre informazioni sulle attività di messaggistica, vedere Attività di messaggistica e Procedura: Creare un servizio flusso di lavoro con attività di messaggistica.

Correlazione basata sul protocollo

La correlazione basata sul protocollo usa il meccanismo di trasporto per correlare messaggi l'uno all'altro e all'istanza appropriata. Alcune correlazioni basate sul protocollo fornite dal sistema includono la correlazione request/reply e la correlazione basata sul contesto. Una correlazione request/reply viene usata per correlare una singola coppia di attività di messaggistica per formare un'operazione bidirezionale, ad esempio un elemento Send accoppiato a un elemento ReceiveReply o un elemento Receive accoppiato a un elemento SendReply. Progettazione flussi di lavoro di Visual Studio fornisce inoltre un set di modelli di attività per implementare in modo rapido questo modello. Una correlazione basata sul contesto si fonda sul meccanismo di scambio del contesto descritto nella pagina relativa alla specifica del protocollo di scambio del contesto .NET. Per usare la correlazione basata su contesto, è necessario usare un'associazione basata sul contesto, ad esempio BasicHttpContextBinding, WSHttpContextBinding o NetTcpContextBinding sull'endpoint.

Per altre informazioni sulla correlazione del protocollo, vedere Durable Duplex e Request-Reply. Per altre informazioni sull'uso dei modelli di attività di Progettazione flussi di lavoro di Visual Studio, vedere Attività di messaggistica. Per il codice di esempio, vedere l'esempio NetContextExchangeCorrelation.

Correlazione basata sul contenuto

La correlazione basata sul contenuto usa alcune informazioni nel messaggio per associarlo a una particolare istanza. A differenza della correlazione basata sul protocollo, per la correlazione basata sul contenuto l'autore dell'applicazione deve dichiarare in modo esplicito il percorso in cui si trovano questi dati in ogni messaggio correlato. Le attività che usano la correlazione basata sul contenuto specificano questi dati del messaggio tramite un elemento MessageQuerySet. La correlazione basata sul contenuto risulta utile in fase di comunicazione con i servizi che non usano una delle associazioni di contesto, ad esempio BasicHttpContextBinding.

Vedi anche