Condividi tramite


Esempio di servizio del flusso di lavoro di una macchina a stati

In questo esempio viene illustrato come creare un servizio del flusso di lavoro utilizzando un flusso di lavoro di una macchina a stati, come implementare una calcolatrice utilizzando un flusso di lavoro di una macchina a stati e viene descritto il processo a esecuzione prolungata in cui lo stato viene salvato automaticamente. Quando si riavvia il servizio del flusso di lavoro, il client può comunicare con la stessa istanza del servizio del flusso di lavoro, perché viene mantenuto lo stato del flusso di lavoro. Nell'esempio viene inoltre illustrato come imporre i protocolli a livello di applicazione del contratto in modo che il flusso di lavoro generi un'eccezione se un'operazione viene chiamata nel servizio in modo imprevisto.

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.

Per ulteriori informazioni sulla configurazione di questo esempio, vedere One-time Setup Procedure for Windows Communication Foundation Samples.

Il servizio implementa il contratto di servizio ICalculator definito nell'esempio di codice seguente.

[ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
public interface ICalculator
{
    [OperationContract()]
    int PowerOn();
    [OperationContract()]
    int Add(int value);
    [OperationContract()]
    int Subtract(int value);
    [OperationContract()]
    int Multiply(int value);
    [OperationContract()]
    int Divide(int value);
    [OperationContract()]
    void PowerOff();
}

L'esempio implementa un insieme di stati, ognuno dei quali è dotato di un insieme di gestori eventi. Ogni gestore eventi contiene un'attività Receive che implementa un'operazione sul contratto ICalculator. Poiché è in un stato specificato, il flusso di lavoro di una macchina a stati può accettare l'insieme di operazioni implementate dalle attività Receive in quel stato. In questo modo consente di imporre un protocollo a livello di applicazione.

Il file Web.config definisce le associazioni per il servizio ed espone due endpoint con due associazioni diverse: BasicHttpContextBinding con i cookie abilitati e WSHttpContextBinding per i client che non desiderano utilizzare BasicHttpContextBinding. WSHttpContextBinding aiuta a mantenere il contesto utilizzato per indirizzare le richieste a una particolare istanza del flusso di lavoro.

Per configurare il servizio in Internet Information Services (IIS)

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

  2. In IIS, attivare l'autenticazione di Windows sulla directory virtuale ServiceModelSamples.

    Per attivare l'autenticazione di Windows in IIS 5.1 o 6.0:

    1. Aprire una finestra del prompt dei comandi e digitare start inetmgr per aprire lo snap-in MMC di Gestione Internet Information Services (IIS).
    2. Fare clic con il pulsante destro del mouse sulla radice virtuale ServiceModelSamples all'interno di Sito Web predefinito, scegliere Proprietà e quindi la scheda Protezione directory.
    3. In Controllo autenticazione e accesso, scegliere Modifica.
    4. Nella finestra di dialogo Metodi di autenticazione selezionare Autenticazione integrata di Windows.

    Per attivare l'autenticazione di Windows in IIS 7.0:

    1. Aprire una finestra del prompt dei comandi e digitare start inetmgr per aprire lo snap-in MMC di Gestione Internet Information Services (IIS).
    2. Selezionare la radice virtuale ServiceModelSamples all'interno di Sito Web predefinito.
    3. Nel riquadro iniziale ServiceModelSamples, fare doppio clic su Autenticazione nel gruppo IIS.
    4. Selezionare Autenticazione di Windows e selezionare l'azione Attiva.
  3. Compilare il progetto. Il progetto compila e aggiorna ServiceModelSamples.

  4. Per consentire l'accesso all'archivio durevole:

    1. Eseguire lo script CreateStores.cmd situato nell'argomento One-Time Setup Procedure for the Windows Communication Foundation Samples. In questo esempio viene utilizzato il database NetFx35Samples_ServiceWorkflowStore.
    2. Impostare l'account utente ASP.NET come membro del gruppo di utenti SQL Server.
  5. Per assicurarsi che il servizio sia installato correttamente, andare all'indirizzo https://localhost/ServiceModelSamples/service.svc nel browser. Dovrebbe essere visualizzata la pagina della Guida del servizio. Per consultare WSDL (Web Services Descriptor Language), digitare https://localhost/ServiceModelSamples/service.svc?wsdl.

  6. Per eseguire l'esempio è necessario utilizzare l'Esempio client calcolatrice. Si tratta di un'interfaccia utente calcolatrice creata utilizzando Windows Presentation Foundation (WPF) che funge da client per il servizio. È possibile utilizzare endpoint diversi che corrispondono alle associazioni fornite dal servizio. Per modificare le associazioni, fare clic sulla voce di menu Endpoint e selezionare l'associazione appropriata, BasicHtttpContextBinding o WSHttpContextBinding.

  7. Per testare la natura durevole del servizio, chiudere e riaprire il client mentre il client calcolatrice è in esecuzione. Il client calcolatrice risponde con la stessa istanza del servizio e visualizza l'ID dell'istanza nella parte inferiore. Il client calcolatrice utilizza un file di testo denominato Client.ctx per archiviare il contesto in una posizione durevole la prima volta che viene eseguita una chiamata (in questo caso, nella directory \bin dell'esempio). Quando viene riavviato, il client controlla se il file è presente. Se il file di testo è presente, applica il contesto archiviato al canale che viene creato. Se il servizio del flusso di lavoro è completato e si apre il client con il file Client.ctx ancora nella directory \bin, il servizio tenta di applicare il contesto al canale. Viene generato un errore, perché l'istanza del flusso di lavoro con la quale si desidera comunicare non è presente. Eliminare il file e provare nuovamente.

  8. È anche possibile riciclare il servizio del flusso di lavoro riavviando IIS. Poiché dopo ogni operazione viene utilizzato un archivio di persistenza, lo stato del servizio viene archiviato. Pertanto, quando si tenta di comunicare con il servizio dal client dopo il riavvio di IIS, l'infrastruttura del flusso di lavoro riceve l'istanza del flusso di lavoro dall'archivio di persistenza ed è possibile comunicare con la stessa istanza.

    Nota

    Quando si richiama un'operazione per la prima volta dopo il riavvio di IIS, si riceve un'eccezione MessageSecurityException causata da un token di protezione scaduto sul canale. Richiamare un'altra operazione e l'operazione riuscirà.

Invia commenti su questo argomento a Microsoft.