Condividi tramite


Gestione delle istanze sospese

L'esempio SuspendedInstanceManagement illustra come gestire le istanze del flusso di lavoro sospese. L'azione predefinita per WorkflowUnhandledExceptionBehavior è AbandonAndSuspend. Ciò significa che, per impostazione predefinita, le eccezioni non gestite generate da un'istanza del flusso di lavoro ospitata nella WorkflowServiceHost causeranno l'abbandono dell'istanza dalla memoria e la versione persistente dell'istanza verrà contrassegnata come sospesa. Un'istanza del flusso di lavoro sospesa non sarà in grado di essere eseguita fino a quando non viene riattivata.

L'esempio mostra come implementare un'utilità della riga di comando per eseguire query per le istanze sospese e come concedere all'utente la possibilità di riprendere o terminare l'istanza. In questo esempio, un servizio di flusso di lavoro genera intenzionalmente un'eccezione, causando la sospensione. L'utilità della riga di comando può quindi essere usata per eseguire una query per l'istanza e successivamente riprendere o terminare l'istanza.

Dimostra

WorkflowServiceHost insieme a WorkflowUnhandledExceptionBehavior e WorkflowControlEndpoint in Windows Workflow Foundation (WF).

Discussione

L'utilità della riga di comando implementata in questo esempio è specifica per l'implementazione dell'archivio di istanze SQL fornita in .NET Framework 4.6.1. Se si dispone di un'implementazione personalizzata dell'archivio di istanze, è possibile adattare questa utilità sostituendo le implementazioni WorkflowInstanceCommand nell'esempio con implementazioni specifiche dell'archivio di istanze.

L'implementazione fornita esegue i comandi SQL nell'archivio di istanze SQL direttamente per elencare le istanze sospese e si basa su un WorkflowControlEndpoint aggiunto al WorkflowServiceHost per riprendere o terminare le istanze.

Per configurare, compilare ed eseguire l'esempio

  1. Questo esempio richiede che i componenti di Windows seguenti siano abilitati:

    1. Microsoft Message Queues (MSMQ) Server

    2. SQL Server Express

  2. Configurare il database di SQL Server.

    1. Da un prompt dei comandi di Visual Studio eseguire "setup.cmd" dalla directory di esempio SuspendedInstanceManagement, che esegue le operazioni seguenti:

      1. Crea un database di persistenza usando SQL Server Express. Se il database di persistenza esiste già, viene eliminato e ricreato

      2. Configura il database per la persistenza.

      3. Aggiunge IIS APPPOOL\DefaultAppPool e NT AUTHORITY\Network Service al ruolo InstanceStoreUsers definito durante la configurazione del database per la persistenza.

  3. Configurare la coda del servizio.

    1. In Visual Studio, fai clic con il pulsante destro del mouse sul progetto SampleWorkflowApp e scegli Imposta come progetto di avvio.

    2. Compilare ed eseguire SampleWorkflowApp premendo F5. Verrà creata la coda richiesta.

    3. Premere Invio per arrestare SampleWorkflowApp.

    4. Aprire la console di Gestione computer eseguendo Compmgmt.msc da un prompt dei comandi di Windows.

    5. Espandere Servizi e Applicazioni, Accodamento Messaggi , Code Private.

    6. Fare clic con il pulsante destro del mouse sulla coda ReceiveTx e selezionare Proprietà.

    7. Selezionare la scheda Sicurezza e consentire a tutti di disporre delle autorizzazioni per Ricezione messaggio, Visualizza messaggioe Invia messaggio.

  4. Adesso, esegui l'esempio.

    1. In Visual Studio eseguire di nuovo il progetto SampleWorkflowApp senza eseguire il debug premendo CTRL+F5. Due indirizzi endpoint verranno stampati nella finestra della console: uno per l'endpoint dell'applicazione e l'altro dall'WorkflowControlEndpoint. Viene quindi creata un'istanza del flusso di lavoro e i record di rilevamento per tale istanza verranno visualizzati nella finestra della console. L'istanza del flusso di lavoro genererà un'eccezione, causando la sospensione e l'interruzione dell'istanza.

    2. L'utilità della riga di comando può quindi essere usata per eseguire altre azioni su una di queste istanze. La sintassi per gli argomenti della riga di comando è la seguente:

      SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]

      I comandi supportati sono: Query, Resumee Terminate. L'opzione InstanceId è necessaria solo per le operazioni di Resume e Terminate.

Per la pulizia (facoltativo)

  1. Aprire la console di Gestione del Computer eseguendo il comando Compmgmt.msc.

  2. Espandi Servizio e Applicazioni, Accodamento Messaggi ,, Code Private.

  3. Eliminare la coda ReceiveTx.

  4. Per rimuovere il database di persistenza, eseguire cleanup.cmd.