Share via


Utilizzo di servizi locali nei flussi di lavoro

Windows Workflow Foundation supporta i servizi di comunicazione locali nell'ambiente host di un flusso di lavoro e le comunicazioni tra flussi di lavoro mediante servizi Web. Per ulteriori informazioni sulle comunicazioni dei flussi di lavoro mediante servizi Web, vedere Comunicazione con altri flussi di lavoro.

I servizi di comunicazione del flusso di lavoro di Windows Workflow Foundation espongono una classe di servizi definita dall'utente al writer del flusso di lavoro come chiamate al metodo e gestori eventi per semplificare la modellizzazione di scambio del messaggio in uscita e in ingresso. Il multiplexing di una singola istanza della classe di servizi a più istanze del flusso di lavoro consente al writer host di eseguire la programmazione per un solo percorso per i messaggi in uscita destinando istanze specifiche del flusso di lavoro durante la generazione di eventi.

Il diagramma seguente illustra la comunicazione di un servizio locale con l'applicazione host.

Comunicazione host locale

Le attività HandleExternalEventActivity e CallExternalMethodActivity sull'istanza del flusso di lavoro interagiscono con eventi e metodi dichiarati in un'interfaccia personalizzata e implementati in un servizio locale personalizzato. L'attività HandleExternalEventActivity risponde a un particolare evento generato dall'applicazione host e implementato dal servizio locale. L'attività CallExternalMethodActivity richiama un metodo sul servizio locale. Per ulteriori informazioni sulle modalità di utilizzo delle attività HandleExternalEventActivity e CallExternalMethodActivity, vedere Utilizzo dell'attività HandleExternalEvent e Utilizzo dell'attività CallExternalMethodActivity.

Servizi di comunicazione del flusso di lavoro

I servizi di comunicazione di flusso di lavoro di Windows Workflow Foundation implementano un semplice meccanismo che consente agli oggetti di comunicare con un'istanza del flusso di lavoro. La definizione del canale di comunicazione consiste in un'interfaccia e l'implementazione in una classe di servizi che viene aggiunta al runtime per semplificare la comunicazione.

Con la classe di servizi il flusso di lavoro si comporta come qualsiasi altra classe consentendo la comunicazione mediante la generazione di eventi e la ricezione di chiamate al metodo. Con il flusso di lavoro l'interfaccia di comunicazione appare come un canale contenente sink di eventi in ingresso e chiamate al metodo di operazioni in uscita.

Le dichiarazioni di metodo esterne sull'interfaccia vengono convertite da ExternalDataExchangeService in chiamate al metodo sull'oggetto servizio. La classe a cui ci si riferisce come servizio locale genera eventi, intercettati dal motore di runtime del flusso di lavoro e recapitati come messaggi in ingresso per il flusso di lavoro.

Il codice seguente rappresenta un esempio di definizione di un'interfaccia di comunicazione del flusso di lavoro locale.

[ExternalDataExchange]
public interface ICommunicationService
{
    void HelloHost(string message);
    event EventHandler<ExternalDataEventArgs> HelloWorkflow;
}

Classe di servizi

Le classi di servizi implementano un'interfaccia che viene utilizzata per definire le comunicazioni con un flusso di lavoro. Tutti gli eventi sull'interfaccia sono unidirezionali, ossia non contengono parametri ref o out né valori restituiti. Per le richieste in uscita, i metodi sull'interfaccia possono tuttavia contenere parametri, ref e out e un valore restituito.

Il modello di comunicazione è molti-a-uno: più istanze del flusso di lavoro, ciascuna delle quali può trasportare più conversazioni, con l'oggetto servizio singleton. Ciò significa che tutte le chiamate in uscita a un particolare metodo, m, da tutti i flussi di lavoro sono gestite dallo stesso m sullo stesso oggetto.

Viceversa tutte le chiamate in ingresso devono essere dirette in modo esplicito alla corretta istanza del flusso di lavoro e alla conversazione. Windows Workflow Foundation fornisce a m un meccanismo per distinguere l'istanza del flusso di lavoro della chiamata in uscita dalla conversazione. Con queste due informazioni, l'oggetto può inviare una risposta alla conversazione corretta sull'istanza del flusso di lavoro corretta.

Windows Workflow Foundation fornisce l'identificatore dell'istanza del flusso di lavoro chiamante in System.Workflow.Runtime.WorkflowEnvironment.WorkflowInstanceId, sul thread chiamante in uscita.

Nell'esempio di codice seguente viene illustrata l'implementazione di un servizio di comunicazione.

public class CommunicationService : ICommunicationService 
{
    public event EventHandler<ExternalDataEventArgs> HelloWorkflow;

    public void HelloHost(string message)
    {
        Console.WriteLine("This is the message: {0}", message);

        // Raise the HelloWorkflow event.
        HelloWorkflow(null, new ExternalDataEventArgs(WorkflowEnvironment.WorkflowInstanceId));
    }
}

Prima di avviare un'istanza del flusso di lavoro, è necessario aggiungere ExternalDataExchangeService al motore di runtime del flusso di lavoro, quindi aggiungere il servizio di comunicazione personalizzato a ExternalDataExchangeService come illustrato nell'esempio di codice seguente.

ExternalDataExchangeService externalService = new ExternalDataExchangeService();
workflowRuntime.AddService(externalService);
externalService.AddService(new CommunicationService());

Per un esempio di comunicazione dell'host con un servizio locale, vedere HostCommunication Sample.

Vedere anche

Riferimenti

HandleExternalEventActivity
CallExternalMethodActivity

Concetti

Utilizzo dell'attività HandleExternalEvent
Utilizzo dell'attività CallExternalMethodActivity
Comunicazione con altri flussi di lavoro
Flusso di lavoro e comunicazioni tra applicazioni

Altre risorse

HostCommunication Sample

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.