Condividi tramite


Esempio di servizio del flusso di lavoro sequenziale

Questo esempio dimostra come creare un servizio del flusso di lavoro utilizzando un flusso di lavoro sequenziale. Questo esempio illustra come creare un contratto di servizio in opera, un metodo di creazione del servizio al quale viene fatto riferimento come modalità flusso di lavoro prima. L'esempio crea un contratto ICalculator ed è implementato nel flusso di lavoro quando questo viene generato.

Nota

Per poter essere generato ed eseguito, l'esempio richiede che sia installato .NET Framework versione 3.5. Per aprire il progetto e i file della soluzione è necessario Visual Studio 2008.

L'implementazione della calcolatrice come un flusso di lavoro include i vantaggi seguenti:

  • È possibile avviare un processo a esecuzione prolungata che salva automaticamente lo stato del flusso di lavoro. Ciò significa che quando il servizio del flusso di lavoro viene riavviato, il client può comunicare con la stessa istanza del servizio.
  • Nel contratto viene applicato il protocollo a livello di applicazione. Se in questo servizio viene chiamata un'operazione in modo imprevisto, il flusso di lavoro genera un'eccezione.

Esempio di servizi del flusso di lavoro sequenziale

In questo flusso di lavoro, l'attività di ricezione PowerOn contiene una proprietà denominata CanCreateInstance, che è contrassegnata true. Ciò significa che viene creata un'istanza di questo servizio quando il client chiama l'operazione PowerOn. Il client riceve il contesto come parte della risposta di questa operazione. Da questo punto in poi è possibile chiamare qualsiasi altra operazione nel flusso di lavoro. Per ogni operazione che viene chiamata dal client, il contesto viene inviato sul canale e quindi l'operazione può essere indirizzata all'istanza corretta. Quando viene chiamata l'operazione PowerOff, viene impostato un valore booleano che determina l'uscita del flusso di lavoro dal ciclo while.

Nel codice di esempio seguente viene illustrato il modello della chiamata WorkflowServiceHost implementato nel file Program.cs nel progetto di servizio.

WorkflowServiceHost workflowHost = new WorkflowServiceHost(typeof(Microsoft.WorkflowServices.Samples.SequentialCalculatorService));
workflowHost.Open();

Nel codice di esempio precedente, il costruttore di WorkflowServiceHost prende come input il tipo di flusso di lavoro e lo apre per ascoltare i messaggi.

Questo esempio contiene anche un'applicazione client che richiama operazioni nel servizio calcolatrice. L'applicazione client è un flusso di lavoro sequenziale ed esegue una serie di chiamate a operazioni. Il flusso di lavoro client utilizza attività Send per richiamare operazioni nel flusso di lavoro. Il progetto client contiene riferimenti al servizio ICalculator che l'attività Send può utilizzare per visualizzare l'interfaccia dalla quale è possibile selezionare operazioni adatte da richiamare.

Per impostare, compilare ed eseguire il progetto.

  1. Eseguire le istruzioni di installazione elencate in One-time Setup Procedure for Windows Communication Foundation Samples.

  2. Per installare i provider di persistenza, eseguire lo script CreateStores.cmd situato nell'argomento One-Time Setup Procedure for the Windows Communication Foundation Samples.

  3. In questo esempio viene utilizzato il database NetFx35Samples_ServiceWorkflowStore. Non include un archivio di persistenza per il flusso di lavoro client. Questo esempio presuppone l'utilizzo di SQL Server Express, in cui vengono installati i database. Se si preferisce installare i database in SQL Server, modificare le stringhe di connessione nel file App.config.

  4. Se non si desidera utilizzare provider di persistenza, impostare come commento la sezione <WorkflowRuntime> dei file App.config.

  5. Eseguire l'esempio come utente del gruppo Administrators. Se si sta utilizzando Windows Vista, fare clic con il pulsante destro del mouse sul file eseguibile client e scegliere Esegui come amministratore.

  6. Dopo che l'applicazione ha iniziato l'esecuzione, il flusso di lavoro client invia un set di operazioni della calcolatrice e quindi completa il flusso di lavoro. È possibile premere INVIO per inviare un altro set di operazioni della calcolatrice.

  7. Per testare la natura di esecuzione prolungata di questo servizio, inserire un punto di interruzione nell'applicazione client. Quando si raggiunge il punto di interruzione in Visual Studio, chiudere e riavviare quindi l'applicazione di servizio. Rilasciare il punto di interruzione nel client. Il flusso di lavoro client comunica con la stessa istanza del flusso di lavoro nel servizio. È inoltre possibile suddividere l'esempio in due soluzioni per testare il riciclo del servizio.

Per eseguire l'esempio su computer distinti

  1. Modificare i file di configurazione per il servizio e il client, controllando di modificare il nome del server nell'indirizzo dell'endpoint. Modificare il nome del server da localhost nel nome del computer nel quale si prevede di eseguire il servizio.

  2. Il servizio utilizza la porta 8888, pertanto è necessario aprire tale porta nel firewall. Dal Pannello di controllo di Windows scegliere Windows Firewall. Scegliere Aggiungi porta, quindi aggiungere la porta 8888. In alternativa, è possibile eseguire il servizio sulla porta predefinita. A tale scopo, rimuovere :8888 dall'indirizzo dell'endpoint.

  3. Modificare il file di configurazione client e aggiungere l'elemento seguente come figlio dell'elemento <endpoint>.

    <identity>
        <UserPrincipalName value=”*@<Domain Name in which your server is running” />
    </identity>
    

    Per determinare il nome di dominio, avviare il servizio sul computer nel quale deve essere eseguito. In una finestra del prompt dei comandi nell'altro computer, eseguire il comando seguente.

    svcutil.exe http://<serverName>:8888/servicehost/Calculator.svc

    Questo comando genera un file con estensione cs e un file output.config. Nell'elemento <endpoint> del file di configurazione, copiare l'elemento <identity> nel file di configurazione client.

Invia commenti su questo argomento a Microsoft.