Novità di Windows Workflow Foundation in .NET Framework 4.5

Windows Workflow Foundation (WF) in .NET Framework 4.5 introduce molte nuove funzionalità, ad esempio nuove attività, funzionalità di progettazione e modelli di sviluppo del flusso di lavoro. Molti, ma non tutti, delle nuove funzionalità del flusso di lavoro introdotte in .NET Framework 4.5 sono supportati nella finestra di progettazione del flusso di lavoro riasospitato. Per altre informazioni sulle nuove funzionalità supportate, vedere Supporto per le nuove funzionalità di Workflow Foundation 4.5 in Progettazione flussi di lavoro riallocazione. Per altre informazioni sulla migrazione di applicazioni flusso di lavoro .NET Framework 3.0 e .NET Framework 3.5 per l'uso della versione più recente, vedere Linee guida per la migrazione. Questo articolo offre una panoramica delle nuove funzionalità del flusso di lavoro introdotte in .NET Framework 4.5.

Avviso

Le nuove funzionalità di Windows Workflow Foundation introdotte in .NET Framework 4.5 non sono disponibili per i progetti destinati a versioni precedenti del framework. Se un progetto destinato a .NET Framework 4.5 viene retargetato a una versione precedente del framework, possono verificarsi diversi problemi.

  • Le espressioni C# verranno sostituite nella finestra di progettazione con il valore del messaggio impostato in XAML.
  • Si verificheranno molti errori di compilazione, incluso il seguente errore.

Il formato file non è compatibile con il framework di destinazione corrente. Per convertire il formato file, salvare il file in modo esplicito. Questo messaggio non verrà più visualizzato dopo aver salvato il file e riaperto la finestra di progettazione.

Controllo delle versioni dei flussi di lavoro

.NET Framework 4.5 ha introdotto diverse nuove funzionalità di controllo delle versioni basate sulla nuova WorkflowIdentity classe. La classe WorkflowIdentity fornisce agli autori dell'applicazione flusso di lavoro un meccanismo per eseguire il mapping di un'istanza del flusso di lavoro persistente con la relativa definizione.

attività

La libreria di attività predefinita contiene nuove attività e funzionalità per le attività esistenti.

NoPersistScope

NoPersistScope è una nuova attività contenitore che impedisce la persistenza di un flusso di lavoro quando vengono eseguite le attività figlio di NoPersistScope. Ciò si rivela utile in scenari in cui non è necessario che il flusso di lavoro sia reso persistente, ad esempio quando il flusso di lavoro usa risorse specifiche del computer come handle di file o durante le transazioni di database. In precedenza, per impedire la persistenza durante l'esecuzione di un'attività, era necessario un oggetto NativeActivity personalizzato in cui veniva usato un oggetto NoPersistHandle.

Nuove funzionalità del diagramma di flusso

I diagrammi di flusso vengono aggiornati per .NET Framework 4.5 e hanno le nuove funzionalità seguenti:

  • La proprietà DisplayName di un'attività FlowSwitch<T> o FlowDecision è modificabile. In questo modo, nell'ActivityDesigner verranno illustrate ulteriori informazioni sullo scopo dell'attività.

  • I diagrammi di flusso dispongono di una nuova proprietà denominata ValidateUnconnectedNodes; l'impostazione predefinita per questa proprietà è False. Se questa proprietà viene impostata su True, i nodi dei diagrammi di flusso non connessi genereranno errori di convalida.

Supporto per l'attendibilità parziale

I flussi di lavoro in .NET Framework 4 richiedevano un dominio applicazione completamente attendibile. In .NET Framework 4.5 i flussi di lavoro possono operare in un ambiente parzialmente attendibile. In un ambiente parzialmente attendibile, i componenti di terze parti possono essere usati senza concedere loro accesso completo alle risorse dell'host. Di seguito vengono riportati alcuni dei problemi che riguardano i flussi di lavoro in esecuzione con attendibilità parziale:

  1. L'utilizzo dei componenti legacy (regole incluse) contenuti nell'attività di Interop non è supportato con l'attendibilità parziale.

  2. I flussi di lavoro in esecuzione con attendibilità parziale in WorkflowServiceHost non sono supportati.

  3. Rendere persistenti le eccezioni in uno scenario parzialmente attendibile rappresenta una potenziale minaccia alla sicurezza. Per disabilitare la persistenza delle eccezioni, un'estensione di tipo ExceptionPersistenceExtension deve essere aggiunta al progetto per rifiutare la memorizzazione delle eccezioni. Nell'esempio di codice riportato di seguito viene illustrato come implementare questo tipo.

    public class ExceptionPersistenceExtension
    {
        public ExceptionPersistenceExtension()
        {
            this.PersistExceptions = false;
        }
        public bool PersistExceptions { get; set; }
    }
    

    Se le eccezioni non devono essere serializzate, assicurarsi che le eccezioni vengano usate all'interno di NoPersistScope.

  4. Gli autori di attività devono eseguire l'override CacheMetadata per evitare che il runtime del flusso di lavoro esegua automaticamente la reflection per questo tipo. Gli argomenti e le attività figlio devono essere non Null e Bind deve essere chiamato in modo esplicito. Per altre informazioni sull'override CacheMetadatadi , vedere Esposizione di dati con CacheMetadata. Inoltre, le istanze di argomenti di un tipo che è internal o privato devono essere create in modo esplicito in CacheMetadata per evitare di essere create dalla reflection.

  5. I tipi non utilizzeranno ISerializable o SerializableAttribute per la serializzazione; i tipi che devono essere serializzati devono supportare DataContractSerializer.

  6. Le espressioni che usano LambdaValue<TResult> richiedono RestrictedMemberAccesse non funzioneranno con attendibilità parziale. I flussi di lavoro che usano LambdaValue<TResult> sostituiscono le espressioni con le attività che derivano da CodeActivity<TResult>. .

  7. Le espressioni non possono essere compilate usando TextExpressionCompiler o il compilatore ospitato di Visual Basic in attendibilità parziale, ma le espressioni precedentemente compilate possono essere eseguite.

  8. Un singolo assembly che usa trasparenza di livello 2 non può essere usato in .NET Framework 4, .NET Framework 4.6.1 con attendibilità totale e .NET Framework 4.6.1 in attendibilità parziale.

Nuove funzionalità di progettazione

Ricerca nella finestra di progettazione

Per rendere più gestibili i flussi di lavoro di grandi dimensioni, è ora possibile effettuarvi ricerche in base a parole chiave. Questa funzionalità è disponibile solo in Visual Studio; questa funzionalità non è disponibile in una finestra di progettazione riallocazione. Sono disponibili due tipi di ricerche:

  • Ricerca rapida avviata con CTRL+F o Modifica, Trova e sostituisci, Ricerca rapida.

  • Trova in File, avviato con CTRL+MAIUSC+F o Modifica, Trova e sostituisci, Trova nei file.

Si noti che la sostituzione non è supportata.

Ricerca veloce

Le parole chiave ricercate nei flussi di lavoro corrisponderanno agli elementi delle finestre di progettazione seguenti:

  • Proprietà degli oggetti Activity, FlowNode, State e Transition, nonché altri elementi di controllo del flusso personalizzati.

  • Variabili

  • Argomenti

  • Espressioni

La ricerca veloce viene effettuata nell'albero ModelItem della finestra di progettazione. Con la ricerca veloce non verranno individuati gli spazi dei nomi importati nella definizione del flusso di lavoro.

Cerca nei file

Le parole chiave ricercate nei flussi di lavoro corrisponderanno al contenuto effettivo dei file del flusso di lavoro. I risultati della ricerca verranno mostrati nel riquadro di visualizzazione Risultati ricerca di Visual Studio. Facendo doppio clic sull'elemento del risultato verrà visualizzata l'attività contenente la corrispondenza nella finestra di progettazione del flusso di lavoro.

Eliminare l'elemento del menu di scelta rapida nella finestra di progettazione delle variabili e degli argomenti

In .NET Framework 4 le variabili e gli argomenti possono essere eliminati solo nella finestra di progettazione usando la tastiera. A partire da .NET Framework 4.5, è possibile eliminare variabili e argomenti usando il menu di scelta rapida.

Nella schermata seguente è illustrato il menu di scelta rapida della finestra di progettazione delle variabili e degli argomenti.

Menu di scelta rapida della finestra di progettazione argomenti e variabili

Racchiudere automaticamente con l'attività Sequence

Poiché un flusso di lavoro o determinate attività contenitore (ad esempio NoPersistScope) potevano contenere solo un'unica attività Body, l'aggiunta di una seconda attività richiedeva allo sviluppatore di eliminare la prima attività, di aggiungere un'attività Sequence e, successivamente, di aggiungere entrambe le attività all'attività Sequence. A partire da .NET Framework 4.5, quando si aggiunge una seconda attività all'area di progettazione, verrà creata automaticamente un'attività Sequence per eseguire il wrapping di entrambe le attività.

La schermata riportata di seguito mostra un'attività di WriteLine in Body di NoPersistScope.

Attività WriteLine nel corpo di un'attività NoPersistScope.

La schermata riportata di seguito mostra l'attività automaticamente creata di Sequence in Body quando un secondo WriteLine viene rilasciato sotto il primo.

Sequenza creata automaticamente nel corpo di un Oggetto NoPersistScope.

Modalità dettaglio

Per spostarsi più facilmente in un flusso di lavoro di grandi dimensioni nella finestra di progettazione è possibile abilitare la modalità dettaglio, consentendo allo sviluppatore di selezionare e trascinare la parte visibile del flusso di lavoro, anziché dover usare le barre di scorrimento. Il pulsante per attivare la modalità dettaglio si trova nell'angolo inferiore destro della finestra di progettazione.

Nella schermata seguente viene illustrato il pulsante della modalità dettaglio posizionato nell'angolo inferiore destro della finestra di progettazione del flusso di lavoro.

Pulsante panoramica evidenziato nella finestra di progettazione del flusso di lavoro.

Per ottenere il dettaglio della finestra di progettazione del flusso di lavoro è anche possibile usare il pulsante centrale del mouse o la barra spaziatrice.

Selezione multipla

È possibile selezionare più attività alla volta trascinando un rettangolo attorno a esse (quando la modalità dettaglio non è abilitata) o tenendo premuto CTRL e facendo clic sulle attività desiderate una alla volta.

Le selezioni di più attività possono anche essere trascinate e rilasciate all'interno della finestra di progettazione, nonché usate con il menu di scelta rapida.

Visualizzazione Struttura degli elementi del flusso di lavoro

Per consentire uno spostamento più semplice nei flussi di lavoro gerarchici, i componenti di un flusso di lavoro vengono visualizzati in una visualizzazione ad albero. La visualizzazione struttura viene visualizzata nella visualizzazione Struttura documento . Per aprire questa visualizzazione, dal menu in alto selezionare Visualizza, Altre finestre, Struttura documento o premere CTRL W,U. Facendo clic su un nodo nella visualizzazione Struttura verrà visualizzata l'attività corrispondente nella finestra di progettazione del flusso di lavoro e la visualizzazione Struttura verrà aggiornata in modo da mostrare le attività selezionate nella finestra di progettazione.

Lo screenshot seguente del flusso di lavoro completato dall'esercitazione Introduzione mostra la visualizzazione struttura con un flusso di lavoro sequenziale.

Screenshot della visualizzazione struttura con un flusso di lavoro sequenziale in Visual Studio.

Espressioni C#

Prima di .NET Framework 4.5, tutte le espressioni nei flussi di lavoro potrebbero essere scritte solo in Visual Basic. In .NET Framework 4.5 le espressioni di Visual Basic vengono usate solo per i progetti creati usando Visual Basic. Nei progetti Visual C# viene ora usato C# per le espressioni. È ora disponibile un editor espressioni C# completamente funzionale con funzionalità quali l'evidenziazione della grammatica e Intellisense. I progetti di flussi di lavoro C# creati in versioni precedenti che utilizzavano espressioni di Visual Basic continueranno a funzionare.

Le espressioni C# vengono convalidate in fase di progettazione. Gli errori nelle espressioni C# verranno contrassegnati con una sottolineatura ondulata rossa.

Per altre informazioni sulle espressioni C#, vedere Espressioni C#.

Maggiore controllo della visibilità degli elementi della barra della shell e dell'intestazione

In una finestra di progettazione ospitata nuovamente, alcuni dei controlli dell'interfaccia utente standard possono non essere appropriati per un determinato flusso di lavoro e, pertanto, è possibile disattivarli. In .NET Framework 4 questa personalizzazione è supportata solo dalla barra della shell nella parte inferiore della finestra di progettazione. In .NET Framework 4.5 è possibile regolare la visibilità degli elementi dell'intestazione della shell nella parte superiore della finestra di progettazione impostando WorkflowShellHeaderItemsVisibility il valore appropriato ShellHeaderItemsVisibility .

Connessione e inserimento automatici nei flussi di lavoro del diagramma di flusso e della macchina a stati

In .NET Framework 4 le connessioni tra nodi in un flusso di lavoro diagramma di flusso devono essere aggiunte manualmente. In .NET Framework 4.5, i nodi Diagramma di flusso e Computer stato hanno punti di connessione automatica che diventano visibili quando un'attività viene trascinata dalla casella degli strumenti nell'area di progettazione. Rilasciando un'attività in uno di questi punti, viene automaticamente aggiunta insieme alla connessione necessaria.

Nella schermata seguente vengono illustrati i punti di associazione che diventano visibili quando un'attività viene trascinata dalla casella degli strumenti.

Nodo di avvio del diagramma di flusso che mostra i punti di connessione automatica

Le attività possono anche essere trascinate nelle connessioni tra i nodi e gli stati del diagramma di flusso per inserire automaticamente un nodo tra altri due. Nella schermata seguente viene illustrata la linea di connessione evidenziata in cui è possibile trascinare e rilasciare le attività dalla casella degli strumenti.

Handle di inserimento automatico per il rilascio delle attività

Annotazioni della finestra di progettazione

Per semplificare lo sviluppo di flussi di lavoro di grandi dimensioni, la finestra di progettazione supporta ora l'aggiunta di annotazioni per consentire di tenere traccia del processo di progettazione. Le annotazioni possono essere aggiunte ad attività, stati, nodi del diagramma di flusso, variabili e argomenti. Nella schermata seguente è illustrato il menu di scelta rapida usato per aggiungere annotazioni alla finestra di progettazione.

Screenshot che mostra un menu per l'aggiunta di annotazioni.

Stati di debug

In .NET Framework 4 gli elementi non attività non supportavano i punti di interruzione di debug perché non erano unità di esecuzione. Questa versione fornisce un meccanismo per aggiungere punti di interruzione agli oggetti State. Se un punto di interruzione è impostato su un oggetto State, l'esecuzione verrà interrotta quando viene eseguita la transizione dello stato, prima della pianificazione delle attività o dei trigger di inserimento.

Definire e usare gli oggetti ActivityDelegate nella finestra di progettazione

Le attività in .NET Framework 4 usavano ActivityDelegate oggetti per esporre i punti di esecuzione in cui altre parti del flusso di lavoro potevano interagire con l'esecuzione di un flusso di lavoro, ma usando questi punti di esecuzione in genere richiedevano una quantità equa di codice. In questa versione gli sviluppatori possono definire e usare delegati di attività tramite la finestra di progettazione del flusso di lavoro. Per altre informazioni, vedere Procedura: Definire e usare delegati attività in Progettazione flussi di lavoro.

Convalida in fase di compilazione

In .NET Framework 4 gli errori di convalida del flusso di lavoro non sono stati conteggiati come errori di compilazione durante la compilazione di un progetto del flusso di lavoro. In questo modo, la compilazione di un progetto di flusso di lavoro poteva essere completata correttamente anche in presenza di errori di convalida del flusso di lavoro. In .NET Framework 4.5, gli errori di convalida del flusso di lavoro causano l'esito negativo della compilazione.

Convalida in background in fase di progettazione

In .NET Framework 4 i flussi di lavoro sono stati convalidati come processo in primo piano, che potrebbe potenzialmente bloccare l'interfaccia utente durante processi di convalida complessi o di tempo. La convalida del flusso di lavoro viene ora effettuata in un thread in background, pertanto l'interfaccia utente non viene bloccata.

Stato di visualizzazione presente in un percorso separato nei file XAML

In .NET Framework 4 le informazioni sullo stato di visualizzazione per un flusso di lavoro vengono archiviate nel file XAML in molte posizioni diverse. Questa condizione è poco pratica per gli sviluppatori che desiderano leggere direttamente i file XAML o scrivere codice per rimuovere le informazioni sullo stato di visualizzazione. In .NET Framework 4.5 le informazioni sullo stato di visualizzazione nel file XAML vengono serializzate come elemento separato nel file XAML. Gli sviluppatori possono individuare e modificare facilmente le informazioni sullo stato di visualizzazione di un'attività o rimuovere completamente lo stato di visualizzazione.

Estendibilità dell'espressione

In .NET Framework 4.5 è possibile creare un'esperienza di creazione di espressioni e espressioni personalizzate che possono essere collegate alla finestra di progettazione del flusso di lavoro.

Consenso esplicito per le funzionalità di .NET 4.5 in una finestra di progettazione ospitata nuovamente

Per mantenere la compatibilità con le versioni precedenti, alcune nuove funzionalità incluse in .NET Framework 4.5 non sono abilitate per impostazione predefinita nella finestra di progettazione rehosted. In questo modo si garantisce che le applicazioni esistenti in cui viene usata la finestra di progettazione ospitata nuovamente non vengano interrotte in caso di aggiornamento alla versione più recente. Per abilitare le nuove funzionalità nella finestra di progettazione ospitata nuovamente, impostare la proprietà TargetFrameworkName su ".NET Framework 4.5" oppure impostare singoli membri dell'oggetto DesignerConfigurationService per abilitare singole funzionalità.

Nuovi modelli di sviluppo dei flussi di lavoro

Oltre ai modelli di sviluppo dei flussi di lavoro del diagramma di flusso e sequenziale, in questa versione sono inclusi i flussi di lavoro macchina a stati e i servizi dei flussi di lavoro con priorità al contratto ("contract-first").

Flussi di lavoro macchina a stati

I flussi di lavoro del computer di stato sono stati introdotti come parte di .NET Framework 4, versione 4.0.1 in Microsoft .NET Framework 4 Platform Update 1. In questo aggiornamento sono incluse numerose nuove classi e attività che hanno consentito agli sviluppatori di creare i flussi di lavoro macchina a stati. Queste classi e attività sono state aggiornate per .NET Framework 4.5. Gli aggiornamenti includono:

  1. Possibilità di impostare punti di interruzione negli stati

  2. Possibilità di copiare e incollare transizioni nella finestra di progettazione del flusso di lavoro

  3. Supporto della finestra di progettazione per la creazione di transizioni con trigger condivisi

  4. Attività usate per creare i flussi di lavoro macchina a stati, incluse StateMachine, State e Transition

Lo screenshot seguente mostra il flusso di lavoro del computer di stato completato dal passaggio Esercitazione IntroduzioneProcedura: Creare un flusso di lavoro del computer di stato.

Figura che mostra il flusso di lavoro del computer di stato completato.

Per altre informazioni sulla creazione di flussi di lavoro del computer di stato, vedere Flussi di lavoro del computer di stato.

Sviluppo di flussi di lavoro con priorità al contratto ("contract-first")

Lo strumento di sviluppo del primo flusso di lavoro consente allo sviluppatore di progettare un contratto nel codice, quindi, con pochi clic in Visual Studio, generare automaticamente un modello di attività nella casella degli strumenti che rappresenta ogni operazione. Queste attività vengono quindi usate per creare un flusso di lavoro che implementa le operazioni definite dal contratto. La finestra di progettazione del flusso di lavoro convaliderà il servizio di quest'ultimo per garantire che queste operazioni vengano implementate e che la firma del flusso di lavoro corrisponda a quella del contratto. Lo sviluppatore può inoltre associare un servizio del flusso di lavoro a una raccolta di contratti implementati. Per altre informazioni sullo sviluppo del servizio del flusso di lavoro del primo contratto, vedere Procedura: Creare un servizio flusso di lavoro che usa un contratto di servizio esistente.