Gestione dell'istanza sospesaSuspended Instance Management

In questo esempio viene illustrato come gestire le istanze del flusso di lavoro che sono state sospese.This sample demonstrates how to manage workflow instances that have been suspended. L'azione predefinita per l'oggetto WorkflowUnhandledExceptionBehavior è AbandonAndSuspend.The default action for WorkflowUnhandledExceptionBehavior is AbandonAndSuspend. Pertanto, per impostazione predefinita, le eccezioni non gestite generate da un'istanza del flusso di lavoro ospitata nell'oggetto WorkflowServiceHost comporteranno l'eliminazione dell'istanza dalla memoria (abbandonata) e la versione durevole/persistente dell'istanza sarà contrassegnata come sospesa.This means that by default, unhandled exceptions thrown from a workflow instance hosted in the WorkflowServiceHost will cause the instance to be disposed from memory (abandoned) and the durable/persisted version of the instance to be marked as suspended. Non sarà possibile eseguire un'istanza del flusso di lavoro sospesa finché non viene annullata la sospensione.A suspended workflow instance will not be able to run until it has been unsuspended.

Nell'esempio viene illustrata l'implementazione di un'utilità della riga di comando per eseguire query per le istanze sospese e viene mostrato come consentire all'utente di riprendere o terminare l'istanza.The sample shows how a command-line utility can be implemented to query for suspended instances, and how to give the user the option to resume or terminate the instance. In questo esempio, un servizio flusso di lavoro genera intenzionalmente un'eccezione, comportandone la sospensione.In this sample, a workflow service intentionally throws an exception, causing it to become suspended. L'utilità della riga di comando può essere quindi usata per eseguire query per l'istanza e, successivamente, per riprendere o terminare l'istanza.The command-line utility can then be used to query for the instance and subsequently resume or terminate the instance.

DimostrazioneDemonstrates

WorkflowServiceHost con WorkflowUnhandledExceptionBehavior e WorkflowControlEndpoint in Windows Workflow Foundation (WF).WorkflowServiceHost with WorkflowUnhandledExceptionBehavior and WorkflowControlEndpoint in Windows Workflow Foundation (WF).

DiscussioneDiscussion

L'utilità della riga di comando implementata in questo esempio è specifica per l'implementazione dell'archivio di istanze SQL fornito con .NET Framework 4.6.1.NET Framework 4.6.1.The command-line utility implemented in this sample is specific to the SQL instance store implementation that ships in .NET Framework 4.6.1.NET Framework 4.6.1. Se si dispone di un'implementazione personalizzata dell'archivio di istanze, è possibile adattare questa utilità sostituendo le implementazioni WorkflowInstanceCommand dell'esempio con le implementazioni specifiche dell'archivio di istanze.If you have a custom implementation of the instance store, then you can adapt this utility by replacing the WorkflowInstanceCommand implementations in the sample with implementations that are specific to your instance store.

L'implementazione fornita esegue direttamente i comandi SQL nell'archivio di istanze SQL per elencare le istanze sospese e si basa su un oggetto WorkflowControlEndpoint aggiunto all'oggetto WorkflowServiceHost per riprendere o terminare le istanze.The provided implementation runs SQL commands against the SQL instance store directly to list suspended instances, and it relies on a WorkflowControlEndpoint added to the WorkflowServiceHost in order to resume or terminate the instances.

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Per questo esempio è necessario aver abilitato i seguenti componenti di Windows:This sample requires that the following Windows components are enabled:

    1. Microsoft Message Queue (MSMQ) ServerMicrosoft Message Queues (MSMQ) Server

    2. SQL Server ExpressSQL Server Express

  2. Impostare il database SQL Server.Set up the SQL Server database.

    1. Da un Visual Studio 2010Visual Studio 2010 prompt dei comandi, eseguire "setup.cmd" dalla directory di esempio SuspendedInstanceManagement, che esegue le operazioni seguenti:From a Visual Studio 2010Visual Studio 2010 command prompt, run "setup.cmd" from the SuspendedInstanceManagement sample directory, which does the following:

      1. Creare un database di persistenza tramite SQL Server Express.Creates a persistence database using SQL Server Express. Se il database di persistenza è già presente, viene eliminato e ricreatoIf the persistence database already exists, then it is dropped and re-created

      2. Impostare il database per la persistenza.Sets up the database for persistence.

      3. Aggiungere IIS APPPOOL\DefaultAppPool e NT AUTHORITY\Network Service al ruolo InstanceStoreUsers definito durante l'impostazione del database per la persistenza.Adds IIS APPPOOL\DefaultAppPool and NT AUTHORITY\Network Service to the InstanceStoreUsers role that was defined when setting up the database for persistence.

  3. Impostare la coda del servizio.Set up the service queue.

    1. In Visual Studio 2010Visual Studio 2010, fare doppio clic su di SampleWorkflowApp sul progetto e scegliere imposta come progetto di avvio.In Visual Studio 2010Visual Studio 2010, right-click the SampleWorkflowApp project and click Set as Startup Project.

    2. Compilare ed eseguire SampleWorkflowApp premendo F5.Compile and run the SampleWorkflowApp by pressing F5. In questo modo verrà creata la coda richiesta.This will create the required queue.

    3. Premere invio per arrestare SampleWorkflowApp.Press Enter to stop the SampleWorkflowApp.

    4. Aprire la console Gestione computer eseguendo Compmgmt.msc da un prompt dei comandi.Open the Computer Management console by running Compmgmt.msc from a command prompt.

    5. Espandere servizi e applicazioni, Accodamento, code Private.Expand Service and Applications, Message Queuing, Private Queues.

    6. Fare clic destro la ReceiveTx coda e selezionare proprietà.Right click the ReceiveTx queue and select Properties.

    7. Selezionare il sicurezza scheda e consentono Everyone disporre delle autorizzazioni per Ricevi messaggio, Visualizza il messaggio, e Invia messaggio.Select the Security tab and allow Everyone to have permissions to Receive Message, Peek Message, and Send Message.

  4. A questo punto, eseguire l'esempio.Now, run the sample.

    1. In Visual Studio 2010Visual Studio 2010, eseguire nuovamente il progetto SampleWorkflowApp senza debug premendo Ctrl + F5.In Visual Studio 2010Visual Studio 2010, run the SampleWorkflowApp project again without debugging by pressing Ctrl+F5. Nella finestra della console saranno stampati due indirizzi endpoint: uno per l'endpoint dell'applicazione e l'altro per l'oggetto WorkflowControlEndpoint.Two endpoint addresses will be printed in the console window: one for the application endpoint and then other from the WorkflowControlEndpoint. Viene quindi creata un'istanza del flusso di lavoro e i record di rilevamento per tale istanza saranno visualizzati nella finestra della console.A workflow instance is then created, and tracking records for that instance will appear in the console window. L'istanza del flusso di lavoro genererà un'eccezione che comporterà la sospensione e l'interruzione dell'istanza.The workflow instance will throw an exception causing the instance to be suspended and aborted.

    2. L'utilità della riga di comando può essere quindi usata per eseguire ulteriori azioni in qualsiasi istanza.The command-line utility can then be used to take further action on any of these instances. Di seguito è riportata la sintassi per gli argomenti della riga di comando:The syntax for command line arguments is as follows::

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

      I comandi supportati sono: Query, Resume e Terminate.The supported commands are: Query, Resume, and Terminate. L'opzione InstanceId è richiesta solo per le operazioni Resume e Terminate.The InstanceId switch is only required for Resume and Terminate operations.

Per eseguire la pulizia (facoltativo)To cleanup (Optional)

  1. Aprire la console Gestione computer eseguendo Compmgmt.msc da un prompt dei comandi di vs2010.Open the Computer Management console by running Compmgmt.msc from a vs2010 command prompt.

  2. Espandere servizi e applicazioni, Accodamento, code Private.Expand Service and Applications, Message Queuing, Private Queues.

  3. Eliminare il ReceiveTx coda.Delete the ReceiveTx queue.

  4. Per rimuovere il database di persistenza, eseguire cleanup.cmd.To remove the persistence database, run cleanup.cmd.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Application\SuspendedInstanceManagement