Procedura: Pubblicare ed eseguire un flusso di lavoro per Gestione flusso di lavoro 1.0

 

In questo passaggio dell'Esercitazione introduttiva su Workflow Manager 1.0 viene creata un'applicazione Workflow Client. Questa applicazione crea un ambito, pubblica l'attività e il flusso di lavoro, quindi richiama il flusso di lavoro.Viene inoltre mostrato l'utilizzo dell'esempio Workflow Resource Browser.

Nota

Per guardare un video con la procedura dettagliata o scaricare i file di avvio e una versione completa dell'esercitazione, compreso l'esempio Workflow Resource Browser, vedere Esercitazione introduttiva su Gestione flusso di lavoro 1.0..

Contenuto di questo passaggio

  • Aggiungere il progetto Microsoft.Workflow.Samples.Common

  • Creare l'applicazione Workflow Client

  • Eseguire l'applicazione Workflow Client

  • Eseguire Workflow Resource Browser

  • Operazioni per la risoluzione dei problemi

Aggiungere il progetto Microsoft.Workflow.Samples.Common

Il progetto Microsoft.Workflow.Samples.Common contiene classi di helper e metodi di estensione che semplificano le attività di amministrazione dei progetti di gestione dei flussi di lavoro, ad esempio la pubblicazione degli ambiti delle attività e dei flussi di lavoro, e viene aggiunto alla soluzione in questo passaggio.

  1. Scaricare ed estrarre i file di avvio per l'esercitazione dall'Esercitazione introduttiva su Gestione flusso di lavoro 1.0.

  2. Aprire la soluzione creata nel passaggio precedente dell'esercitazione, Procedura: creare un'attività personalizzata per Gestione flusso di lavoro 1.0, se non è già aperta in Visual Studio 2012.

  3. Fare clic con il pulsante destro del mouse su WFMgrGettingStarted in Esplora soluzioni e scegliere Aggiungi, Progetto esistente.

  4. Passare alla posizione in cui sono stati estratti i file di avvio per l'esercitazione, quindi accedere alla seguente cartella.

    <Starter files location>\Start\Microsoft.Workflow.Samples.Common

  5. Selezionare Microsoft.Workflow.Samples.Common.csproj e fare clic su Apri.

  6. Premere CTRL+MAIUSC+B per creare la soluzione.

Creare l'applicazione Workflow Client

In questo passaggio viene creata l'applicazione Workflow Client.Tale applicazione crea un ambito, pubblica l'attività e il flusso di lavoro all'interno di esso, quindi richiama il flusso di lavoro.Durante l'esecuzione del flusso di lavoro, l'applicazione client esegue il polling per verificare la presenza di aggiornamenti dello stato, quindi visualizza lo stato contenente i prodotti recuperati dalla ricerca.Quando l'esecuzione dell'applicazione viene completata, l'ambito viene svuotato e gli elementi del flusso di lavoro vengono rimossi.

  1. Fare clic con il pulsante destro del mouse su WFMgrGettingStarted in Esplora soluzioni e scegliere Aggiungi, Nuovo progetto.

  2. Nel nodo Installato selezionare Visual C#, Windows.Assicurarsi che nell'elenco a discesa della versione di .NET Framework sia selezionato .NET Framework 4.5.Selezionare Applicazione console dall'elenco.Digitare GetProductsWorkflowClient nella casella Nome e fare clic su OK.

  3. Fare clic con il pulsante destro del mouse su GetProductsWorkflowClient in Esplora soluzioni e selezionare Aggiungi riferimento.

  4. Selezionare Soluzione dall'elenco Aggiungi riferimento, quindi selezionare le caselle accanto a Microsoft.Workflow.Samples.Common e GetProductsActivities.

  5. Fare clic sul pulsante Sfoglia e accedere a C:\Program Files\Reference Assemblies\Microsoft\Workflow Manager\1.0.

  6. Selezionare Microsoft.Workflow.Client.dll e Microsoft.Activities.dll, quindi fare clic su Aggiungi.

  7. Fare clic su OK per chiudere la finestra di dialogo Gestione riferimenti e aggiungere i riferimenti.

  8. Fare doppio clic su Program.cs in Esplora soluzioni per visualizzare il codice.

  9. Aggiungere la seguente istruzione using nella parte superiore del file contenente le altre istruzioni using (Frammento3).

    using Microsoft.Workflow.Client;
    using Microsoft.Workflow.Samples.Common;
    

    Suggerimento

    Per l'esercitazione vengono forniti file contenenti frammenti di codice.Per usarli, scaricare i file di avvio per l'esercitazione dall'Esercitazione introduttiva su Gestione flusso di lavoro 1.0.In Visual Studio scegliere Gestione frammenti di codice dal menu Strumenti.Selezionare Visual C# dall'elenco a discesa Linguaggio, quindi fare clic sul pulsante Aggiungi.Individuare il percorso in cui sono stati estratti i file di avvio e selezionare la cartella Assets\WFMgrGettingStarted.Fare clic su Seleziona cartella, quindi fare clic su OK.Nel file del codice fare clic con il pulsante destro del mouse sul punto in cui si desidera inserire il frammento e selezionare Inserisci frammento di codice.Scorrere verso il basso l'elenco e fare doppio clic su WFMgrGettingStarted, quindi sul frammento di codice desiderato.

  10. Aggiungere le seguenti variabili membro statiche alla classe Program (Frammento4).

    static string workflowName = "GetProductsWorkflow";
    static string baseAddress = "https://<Base address>:12290/";
    
    System_CAPS_importantImportante

    baseAddress deve puntare al server di Gestione flusso di lavoro.Se il server di Gestione flusso di lavoro è ospitato sul computer di sviluppo in uso, è possibile recuperare questo nome verificando il nome del computer.Per trovare il nome del computer, fare clic sul pulsante Start, quindi con il pulsante destro del mouse fare clic su Computer e visualizzare il nome completo del computer.Configurare l'baseAddress con il nome completo del computer nel modo seguente: https://Full computer name:12290. Ad esempio https://mycomputername:12290/ o https://myserver.mydomain.mycompany.com:12290/.

  11. Aggiungere le seguenti righe di codice al metodo Main (Frammento5).

    Console.Write("Setting up scope...");
    WorkflowManagementClient client = WorkflowUtils.CreateForSample(baseAddress, "WFMgrGettingStarted");
    WorkflowUtils.PrintDone();
    
    Console.Write("Publishing GetProducts activity...");
    client.PublishActivity("GetProducts", @"..\..\..\GetProductsActivities\GetProducts.xaml");
    WorkflowUtils.PrintDone();
    
    Console.Write("Publishing Workflow...");
    client.PublishWorkflow(workflowName, @"..\..\..\GetProductsActivities\GetProductsWorkflow.xaml");
    WorkflowUtils.PrintDone();
    

    Questo codice usa i metodi di estensione e le classi di helper definite nel progetto Microsoft.Workflow.Samples.Common per semplificare le attività di pubblicazione degli ambiti, dell'attività e dei flussi di lavoro e la gestione di questi elementi.Il codice contenuto in questo passaggio crea un ambito e usa l'istanza WorkflowManagementClient restituita per pubblicare GetProducts e GetProductsWorkflow all'interno di esso.

  12. Aggiungere le seguenti righe di codice al metodo Main posizionandole dopo le righe di codice precedenti.Questo codice richiede all'utente il termine di ricerca da usare per eseguire la query sul servizio Northwind oData (Frammento6).

    Console.Write("Enter a search keyword: ");
    string SearchKeyword = Console.ReadLine();
    
  13. Avviare l'istanza del flusso di lavoro aggiungendo le seguenti righe di codice dopo il codice del passaggio precedente (Frammento7).

    Console.Write("Starting workflow instance...");
    WorkflowStartParameters startParameters = new WorkflowStartParameters();
    startParameters.Content.Add("SearchKeyword", SearchKeyword);
    string instanceId = client.Workflows.Start(workflowName, startParameters);
    WorkflowUtils.PrintDone();
    

    Questo codice assembla i parametri iniziali del flusso di lavoro, che sono mappati sugli argomenti In del flusso di lavoro, quindi li usa per avviare un'istanza di tale flusso.

  14. Aggiungere il seguente codice a Main posizionandolo dopo il codice del passaggio precedente (Frammento8).

    Console.WriteLine("\nPolling UserStatus...\n");
    string finalUserStatus = client.WaitForWorkflowCompletion(workflowName, instanceId);
    WorkflowUtils.Print("Completed with status: " + finalUserStatus, ConsoleColor.Green);
    

    Questo codice usa il metodo di estensione WaitForWorkflowCompletion definito nel progetto Microsoft.Workflow.Samples.Common per attendere il completamento del flusso di lavoro, quindi esegue il polling per ottenere gli aggiornamenti dello stato impostati dall'attività SetStatus durante l'attesa.

  15. Aggiungere il seguente codice alla fine del metodo Main posizionandolo dopo il codice del passaggio precedente (Frammento9).

    Console.WriteLine("Press any key to clean up scope.");
    Console.ReadKey();
    
    client.CleanUp();
    
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
    

    Quando viene svuotato l'ambito, vengono rimossi gli elementi del flusso di lavoro, quindi l'ambito viene rimosso.In uno scenario di produzione queste attività vengono in genere eseguite dall'amministratore, tuttavia ai fini del seguente esempio vengono eseguite nel codice.

    L'esempio seguente contiene la classe Program completa (Frammento10).

    class Program
    {
        static string workflowName = "GetProductsWorkflow";
        static string baseAddress = "https:<Base address>:12290/";
    
        static void Main(string[] args)
        {
            Console.Write("Setting up scope...");
            WorkflowManagementClient client = WorkflowUtils.CreateForSample(baseAddress, "WFMgrGettingStarted");
            WorkflowUtils.PrintDone();
    
            Console.Write("Publishing GetProducts activity...");
            client.PublishActivity("GetProducts", @"..\..\..\GetProductsActivities\GetProducts.xaml");
            WorkflowUtils.PrintDone();
    
            Console.Write("Publishing Workflow...");
            client.PublishWorkflow(workflowName, @"..\..\..\GetProductsActivities\GetProductsWorkflow.xaml");
            WorkflowUtils.PrintDone();
    
            Console.Write("Enter a search keyword: ");
            string SearchKeyword = Console.ReadLine();
    
            Console.Write("Starting workflow instance...");
            WorkflowStartParameters startParameters = new WorkflowStartParameters();
            startParameters.Content.Add("SearchKeyword", SearchKeyword);
            string instanceId = client.Workflows.Start(workflowName, startParameters);
            WorkflowUtils.PrintDone();
    
            Console.WriteLine("\nPolling UserStatus...\n");
            string finalUserStatus = client.WaitForWorkflowCompletion(workflowName, instanceId);
            WorkflowUtils.Print("Completed with status: " + finalUserStatus, ConsoleColor.Green);
    
            Console.WriteLine("Press any key to clean up scope.");
            Console.ReadKey();
    
            client.CleanUp();
    
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    

Eseguire l'applicazione Workflow Client

System_CAPS_importantImportante

I passaggi contenuti in questa sezione richiedono l'esecuzione di Visual Studio in modalità amministrativa.Se Visual Studio non è stato avviato in modalità amministrativa Visual Studio, riavviarlo in questa modalità, quindi riavviare la soluzione.

  1. Fare clic con il pulsante destro del mouse su GetProductsWorkflowClient in Esplora soluzioni e selezionare Imposta come progetto di avvio.

  2. Premere CTRL+F5 per avviare l'applicazione.

    Suggerimento

    Se si riscontrano problemi durante l'esecuzione dell'esempio, vedere Operazioni per la risoluzione dei problemi per ottenere soluzioni per i problemi comuni.

  3. Dopo aver impostato l'ambito e pubblicato le attività GetProducts e GetProductsWorkflow, digitare un termine di ricerca, ad esempio choc quando richiesto, quindi premere INVIO.Questo termine di ricerca verrà usato per eseguire le query per il recupero di prodotti nel database di esempio Northwind.Premere INVIO senza immettere un termine di ricerca affinché vengano restituiti i primi 20 prodotti del database (il numero massimo che è possibile ottenere con questo codice).

    L'attività GetProducts esegue una query sul servizio Northwind oData ospitato all'indirizzo http://services.odata.org/Northwind/Northwind.svc e restituisce il DynamicValue contenente i prodotti corrispondenti alla parola chiave della ricerca.GetProductsWorkflow viene ripetuto attraverso i prodotti e li specifica come aggiornamenti dello stato utente usando l'attività SetUserStatus.L'applicazione client esegue il polling per ottenere questi aggiornamenti dello stato e visualizzare i prodotti.Quando l'esecuzione dell'applicazione viene completata, viene richiesto di premere un tasto per svuotare l'ambito.

  4. Premere un tasto per svuotare l'ambito, quindi premerne un altro per uscire.

  5. Premere CTRL+F5 per eseguire nuovamente l'applicazione e provare termini di ricerca differenti.

    Per vedere un video con la procedura dettagliata di questo passaggio dell'esercitazione, vedere Esercitazione introduttiva su Gestione flusso di lavoro 1.0

Eseguire Workflow Resource Browser

In questa attività l'esempio Workflow Resource Browser viene usato per esplorare l'ambito e gli elementi del flusso di lavoro creati dall'applicazione Workflow Client.È possibile scaricare Workflow Resource Browser separatamente, tuttavia è anche incluso nei file di avvio dell'esercitazione scaricati nella sezione Aggiungere il progetto Microsoft.Workflow.Samples.Common.

  1. Aprire una nuova istanza di Visual Studio 2012 e scegliere Apri, Progetto/Soluzione dal menu File.

    System_CAPS_importantImportante

    Non chiudere la soluzione WFMgrGettingStarted in quanto viene usata in questo passaggio insieme all'esempio Workflow Resource Browser.

  2. Passare alla posizione in cui sono stati estratti i file di avvio per l'esercitazione, quindi accedere alla seguente cartella.

    <Percorso file di avvio>\Visualizzatore risorse del flusso di lavoro

  3. Selezionare WFExplorer.sln e fare clic su Apri.

  4. Premere Ctrl+F5 per creare ed eseguire l'applicazione.

  5. Se viene richiesto un indirizzo Workflow Service e la casella non è prepopolata con l'indirizzo corretto, usare l'indirizzo di base usato durante l'esecuzione dell'esercitazione, quindi fare clic su Connetti.

  6. Tenere presente che non esistono ambiti figli.Tornare all'istanza di Visual Studio precedente ed eseguire nuovamente l'applicazione GetProductsWorkflowClient.Immettere un termine di ricerca, tuttavia quando il flusso di lavoro viene completato, non premere alcun tasto per svuotare l'ambito.

  7. Tornare alla finestra di Workflow Explorer e premere F5 per aggiornare la visualizzazione.

  8. Osservare come sia presente l'ambito WFMgrGettingStarted.Fare clic su WFMgrGettingStarted per selezionarlo. Si noteranno due attività e un flusso di lavoro.Questo è dovuto al fatto che entrambe GetProducts e GetProductsWorkflow sono attività, ma solo l'attività GetProductsWorkflow è stata pubblicata come flusso di lavoro.

  9. Fare clic sulle diverse voci nel riquadro destro per esplorare gli elementi contenuti nell'ambito e usare il pulsante Indietro nella parte superiore del riquadro per tornare alla visualizzazione predefinita dell'ambito.

  10. Tornare alla finestra della console GetProductsWorkflowClient e premere un tasto per svuotare l'ambito, quindi tornare alla finestra Workflow Explorer premere F5 per eseguire l'aggiornamento. Osservare come l'ambito sia stato rimosso.

Operazioni per la risoluzione dei problemi

Le operazioni descritte in questa sezione possono essere usate per risolvere i problemi comuni che è possibile riscontrare durante lo sviluppo di applicazioni in Gestione flusso di lavoro.

  • L'applicazione Workflow Client si blocca oppure vengono generate eccezioni di timeout

  • Viene visualizzato il messaggio System.Net.WebException: Connessione sottostante chiusa: Impossibile stabilire una relazione di trust per il canale sicuro SSL/TLS

  • Viene visualizzato il messaggio System.UnauthorizedAccessException: Il chiamante non dispone delle autorizzazioni necessarie richieste per eseguire l'operazione.Autorizzazioni concesse: Nessuna.Autorizzazioni obbligatorie: WriteScope

  • Viene visualizzato il messaggio System.Xaml.XamlObjectWriterException: Impossibile creare il tipo sconosciuto '{clr-namespace:GetProductsActivities}GetProducts'.

  • Viene visualizzato il messaggio: Impossibile caricare l'attività a causa di errori nell'XAML.

  • Viene visualizzato il messaggio che non è possibile trovare 'DynamicValue' nello spazio dei nomi 'https://schemas.microsoft.com/workflow/2012/xaml/activities'.

L'applicazione Workflow Client si blocca oppure vengono generate eccezioni di timeout

Assicurarsi che siano avviati i seguenti servizi, quindi provare a riavviare l'applicazione.

  • Gateway del bus di servizio

  • Gestore messaggi del bus di servizio

  • SQL Server (SQLEXPRESS o il server in uso)

  • Back-end di Gestione flusso di lavoro

Assicurarsi che il computer sia dotato dell'accesso a Internet.L'esempio esegue query sul servizio Northwind odata ospitato all'indirizzo http://services.odata.org/Northwind/Northwind.svc e se il computer non è dotato dell'accesso a Internet non verrà eseguito correttamente.Nelle macchine virtuali questo problema può essere talvolta risolto facendo clic sull'icona della rete nella barra delle applicazioni e facendo clic su Risoluzione problemi.Dopo aver ripristinato l'accesso a Internet, provare a rieseguire l'esempio.

Assicurarsi che l'baseAddress faccia riferimento al server di Gestione flusso di lavoro.Se il server di Gestione flusso di lavoro è ospitato sul computer corrente, fare clic sul pulsante Start, quindi con il pulsante destro del mouse fare clic su Computer per visualizzare il nome completo del computer e configurare l'baseAddress con tale nome nel seguente modo: https://Full computer name:12290. Ad esempio https://mycomputer:12290/ o https://myserver.mydomain.mycompany.com:12290/.

Se questi problemi persistono, è possibile che l'ambito sia danneggiato.Questo potrebbe verificarsi se l'esempio viene arrestato durante l'esecuzione e l'ambito non è completamente impostato o svuotato.Se i servizi sono in esecuzione e l'indirizzo di base è corretto, tuttavia i problemi continuano a verificarsi, è possibile provare a modificare il nome dell'ambito dell'esempio adottando un nome differente, quale WFMgrGettingStarted2, come illustrato nell'esempio riportato di seguito.

WorkflowManagementClient client = WorkflowUtils.CreateForSample(baseAddress, "WFMgrGettingStarted2");

Viene visualizzato il messaggio System.Net.WebException: Connessione sottostante chiusa: Impossibile stabilire una relazione di trust per il canale sicuro SSL/TLS

Questo problema può verificarsi se esiste una mancata corrispondenza tra l'indirizzo di base e l'indirizzo usato per il certificato in IIS oppure nel caso in cui non sia stato configurato alcun certificato SSL (come potrebbe accadere nei computer di sviluppo).Per risolverlo, assicurarsi che l'indirizzo di base corrisponda all'indirizzo sul certificato oppure aggiungere il codice seguente all'applicazione affinché venga richiamato prima che si esegua l'accesso a Gestione flusso di lavoro per la prima volta.

// The following code allows a client to use a non-fully qualified name and resolves https issues such as:
// System.Net.WebException: The underlying connection was closed: Could not establish trust 
// relationship for the SSL/TLS secure channel
// NOT for production, only for limited local development.
System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate(object sender,
            System.Security.Cryptography.X509Certificates.X509Certificate certificate,
            System.Security.Cryptography.X509Certificates.X509Chain chain,
            System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
};

Viene visualizzato il messaggio System.UnauthorizedAccessException: Il chiamante non dispone delle autorizzazioni necessarie richieste per eseguire l'operazione.Autorizzazioni concesse: Nessuna.Autorizzazioni obbligatorie: WriteScope

Questa eccezione può essere generata se Visual Studio non viene avviato usando i privilegi amministrativi e l'esempio viene eseguito dall'interno di Visual Studio.Per risolverlo, avviare Visual Studio in modalità amministrativa.

Viene visualizzato il messaggio System.Xaml.XamlObjectWriterException: Impossibile creare il tipo sconosciuto '{clr-namespace:GetProductsActivities}GetProducts'.

Se quando si pubblica un flusso di lavoro che fa riferimento a un'attività pubblicata in precedenza viene restituito questo errore, verificare quanto riportato di seguito.

Aprire l'Assembly.cs del progetto contenente l'attività personalizzata e verificare che sia presente la seguente riga di codice:

[assembly: XmlnsDefinition("wf://workflow.windows.net/$Current/$Activities", "GetProductsActivities")]

Il secondo parametro deve corrispondere allo spazio dei nomi del progetto contenente le attività personalizzate.Se questa riga non è presente, aggiungerla, quindi aggiungere un'istruzione using System.Windows.Markup; nella parte superiore del file.Creare nuovamente il progetto con l'attività personalizzata, quindi eliminare e aggiungere di nuovo l'attività nel flusso di lavoro.Dopo aver riaggiunto l'attività al flusso di lavoro, aprire il flusso di lavoro Xaml (fare clic con il pulsante destro del mouse su Esplora soluzioni e scegliere Apri con, Editor XML (testo)), quindi fare clic su OK e verificare che sia presente la seguente riga.

xmlns:p1="wf://workflow.windows.net/$Current/$Activities"

Viene visualizzato il messaggio: Impossibile caricare l'attività a causa di errori nell'XAML.

Se questo errore si verifica durante l'apertura del flusso di lavoro nella relativa area di progettazione, premere Ctrl+Shift+B per creare la soluzione.Questa operazione consente di creare l'attività personalizzata richiesta affinché possa essere visualizzata nell'area di progettazione del flusso di lavoro.

Viene visualizzato il messaggio che non è possibile trovare 'DynamicValue' nello spazio dei nomi 'https://schemas.microsoft.com/workflow/2012/xaml/activities'.

Errori di questo tipo possono verificarsi a causa di una mancata corrispondenza tra gli esempi e l'ultima versione di Strumenti di Workflow Manager 1.0 per Visual Studio 2012.Per risolverli assicurarsi prima di aver installato la versione più recente di Strumenti di Workflow Manager daInstallazione di Strumenti di Gestione flusso di lavoro 1.0 per Visual Studio 2012, quindi sostituire tutte le istanze della seguente riga nei file XAML con la riga successiva.

Sostituire:

xmlns:p="https://schemas.microsoft.com/workflow/2012/xaml/activities"

Con:

xmlns:p="https://schemas.microsoft.com/workflow/2012/07/xaml/activities"

Vedere anche

Esercitazione introduttiva su Workflow Manager 1.0