Scambio del contesto

Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.

La correlazione del contesto è basata sul meccanismo di scambio del contesto descritto nella pagina relativa alla specifica del protocollo di scambio del contesto .NET. La correlazione del contesto utilizza un'intestazione del contesto nota o un cookie per correlare messaggi all'istanza corretta. Per utilizzare la correlazione del contesto, è necessario utilizzare un'associazione basata sul contesto, ad esempio BasicHttpContextBinding, WSHttpContextBinding o NetTcpContextBinding, sull'endpoint fornito a WorkflowServiceHost. In questo argomento viene illustrato come utilizzare la correlazione del contesto con attività di messaggistica in un servizio flusso di lavoro.

Utilizzo della correlazione del contesto

La correlazione del contesto viene utilizzata se un client deve effettuare chiamate ripetute in un servizio flusso di lavoro e quest'ultimo viene ospitato mediante una delle associazioni del contesto. Questo tipo di correlazione viene inizializzato da una coppia Receive/SendReply nel servizio flusso di lavoro. Il contesto viene nuovamente inviato al client con la replica e quindi il client associa questo contesto a chiamate successive al servizio.

Configurazione della correlazione del contesto in un servizio flusso di lavoro

La correlazione del contesto viene inizializzata utilizzando un ContextCorrelationInitializer associato all'attività SendReply che risponde al messaggio in ingresso iniziale. Nell'esempio seguente SendReply viene configurato per inizializzare una correlazione di contesto.

Variable<string> Item = new Variable<string>();
Variable<CorrelationHandle> OrderHandle = new Variable<CorrelationHandle>();

Receive StartOrder = new Receive
{
    CanCreateInstance = true,
    ServiceContractName = "IOrderService",
    OperationName = "StartOrder"
};

SendReply ReplyToStartOrder = new SendReply
{
    Request = StartOrder,
    CorrelationInitializers =
    {
        new ContextCorrelationInitializer
        {
            CorrelationHandle = OrderHandle
        }
    }
};
Ee358724.note(it-it,VS.100).gifNota:
La coppia Receive/SendReply utilizza la correlazione richiesta-risposta predefinita fornita dalla gestione implicita CorrelationHandle di WorkflowServiceHost. Per ulteriori informazioni, vedere Request/Reply.

Le attività Receive successive nel servizio flusso di lavoro possono fare riferimento all'elemento CorrelationHandle inizializzato da SendReply nell'esempio precedente.

Receive AddItem = new Receive
{
    ServiceContractName = "IOrderService",
    OperationName = "AddItem",
    CorrelatesWith = OrderHandle
};

L'endpoint viene quindi configurato sull'elemento WorkflowServiceHost per utilizzare un'associazione basata sul contesto, ad esempio BasicHttpContextBinding.

<endpoint
  contract=”IOrderContract”
  binding = “basicHttpContextBinding”
  address=”https://localhost:8080/OrderService” />

Configurazione della correlazione del contesto in un client flusso di lavoro

Se il client è un altro flusso di lavoro, è necessario configurare la correlazione del contesto anche sul client. Nel flusso di lavoro client è necessario configurare ReceiveReply della coppia Send/ReceiveReply che effettua la chiamata iniziale al servizio flusso di lavoro con un ContextCorrelationInitializer.

Variable<CorrelationHandle> cchandle = new Variable<CorrelationHandle>();
Send request = new Send
{
    // Activity configuration omitted.
};

ReceiveReply reply = new ReceiveReply
{
    Request = request,
    CorrelationInitializers = 
    {
        new ContextCorrelationInitializer
        {
            CorrelationHandle = cchandle
        }
    }
};

Una volta inizializzata la correlazione, le attività Send successive possono utilizzare CorrelationHandle per richiamare metodi sulla stessa istanza del servizio.

Send request2 = new Send
{
    CorrelatesWith = cchandle,
    // Remaining activity configuration omitted.
};

In questi esempi è stata configurata la correlazione del contesto in modo esplicito. Se il flusso di lavoro client non è anche ospitato in un WorkflowServiceHost, la correlazione deve essere configurata in modo esplicito, a meno che le attività siano contenute all'interno di un'attività CorrelationScope.

Se il client che effettua chiamate al servizio flusso di lavoro non è un flusso di lavoro, può comunque effettuare chiamate ripetute a condizione che passi di nuovo il contesto restituito dalla prima chiamata al servizio flusso di lavoro. I proxy generati aggiungendo un riferimento al servizio in Visual Studio 2010 archiviano e passano questo contesto per impostazione predefinita.