Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
.NET Framework 4 aggiunge una serie di funzionalità a Windows Workflow Foundation. Questo documento descrive una serie di nuove funzionalità e fornisce informazioni dettagliate sugli scenari in cui possono essere utili.
Attività di messaggistica
Le attività di messaggistica (Receive, SendReply, Send, ) ReceiveReplyvengono usate per inviare e ricevere messaggi WCF dal flusso di lavoro. Receive e SendReply vengono utilizzate per formare un'operazione del servizio Windows Communication Foundation (WCF) esposta tramite WSDL proprio come i servizi Web WCF standard. Send e ReceiveReply vengono usati per utilizzare un servizio Web simile a un WCF ChannelFactory; esiste anche un'esperienza di "Add Service Reference" per Workflow Foundation che genera attività preconfigurate.
Introduzione alle attività di messaggistica
In Visual Studio 2012 creare un progetto applicazione del servizio flusso di lavoro WCF. Una coppia Receive e SendReply verrà inserita nell'area di disegno.
Fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi riferimento al servizio. Puntare a un WSDL di un servizio web esistente e fare clic su OK. Compilare il progetto per visualizzare le attività generate (implementate con Send e ReceiveReply) nella casella degli strumenti.
Scenario di esempio di attività di messaggistica
Un BestPriceFinder
servizio chiama più servizi aerei per trovare il miglior prezzo del biglietto per una determinata rotta. L'implementazione di questo scenario richiederebbe l'uso delle attività del messaggio per ricevere la richiesta di prezzo, recuperare i prezzi dai servizi back-end e rispondere alla richiesta di prezzo con il prezzo migliore. È anche necessario usare altre attività predefinite per creare la logica di business per calcolare il prezzo migliore.
WorkflowServiceHost
WorkflowServiceHost è un host del flusso di lavoro usato che supporta istanze multiple, configurazione e messaggistica WCF (anche se i flussi di lavoro non necessitano di messaggistica per essere ospitati). Si integra anche con la persistenza, il monitoraggio e la gestione delle istanze tramite un set di comportamenti del servizio. Proprio come per WCF ServiceHost, WorkflowServiceHost può essere ospitato autonomamente in un'applicazione console/WinForms/WPF o come servizio Windows, oppure ospitato nel web (come un file .xamlx) in IIS o WAS.
Introduzione all'host del servizio di flusso di lavoro
In Visual Studio 2010 creare un progetto applicazione del servizio flusso di lavoro WCF: questo progetto verrà configurato per l'uso WorkflowServiceHost in un ambiente host Web.
Per ospitare un flusso di lavoro non di messaggistica, aggiungere un oggetto personalizzato WorkflowHostingEndpoint che creerà l'istanza in base a un messaggio.
Le istanze del flusso di lavoro possono essere controllate (ad esempio sospese o terminate) aggiungendo un WorkflowControlEndpoint oggetto a WorkflowServiceHost e quindi usando un oggetto WorkflowControlClient.
Gli esempi per l'oggetto WorkflowServiceHost sono disponibili nelle sezioni seguenti:
Applicazione: Gestione delle istanze sospese
Scenario di WorkflowServiceHost
Un servizio BestPriceFinder chiama a più servizi aerei per trovare il miglior prezzo del biglietto per una determinata rotta. L'implementazione di questo scenario richiederebbe di ospitare il flusso di lavoro in WorkflowServiceHost. Utilizzerebbe anche le attività di messaggio per ricevere la richiesta di prezzo, recuperare i prezzi dai servizi back-end e rispondere alla richiesta di prezzo con il prezzo migliore.
Correlazione
Una correlazione è una delle due cose seguenti:
Un modo per raggruppare i messaggi; ovvero la relazione tra un messaggio di richiesta e la relativa risposta.
Un modo per mappare un insieme di dati a un'istanza del servizio
Come iniziare
Per iniziare a usare la correlazione, creare un nuovo progetto in Visual Studio. Creare una variabile di tipo CorrelationHandle.
Un esempio di correlazione usato per raggruppare i messaggi è una correlazione Request-Reply che raggruppa i messaggi.
In un'attività Receive fare clic sulla proprietà CorrelationInitializers e aggiungere un RequestReplyCorrelationInitializer utilizzando l'oggetto CorrelationHandle creato nel primo passaggio sopra.
Creare un'attività SendReply facendo clic con il pulsante destro del mouse su Receive e cliccando su "Crea SendReply". Incollarlo nel flusso di lavoro dopo l'attività Receive .
Un esempio di mapping di una parte di dati a un'istanza del servizio è la correlazione basata sul contenuto che esegue il mapping di una parte di dati (ad esempio, un ID ordine) a una particolare istanza del flusso di lavoro.
- In qualsiasi attività di messaggistica, fare clic sulla proprietà
CorrelationInitializers
e aggiungere un QueryCorrelationInitializer utilizzando la variabile CorrelationHandle creata in precedenza. Fare doppio clic sulla proprietà desiderata nel messaggio (ad esempio OrderID) dal menu a discesa. Impostare laCorrelatesWith
proprietà sulla CorrelationHandle variabile usata in precedenza.
- In qualsiasi attività di messaggistica, fare clic sulla proprietà
Scenario di correlazione
Un flusso di lavoro di elaborazione degli ordini viene usato per gestire la creazione di nuovi ordini e aggiornare gli ordini esistenti in fase di elaborazione. L'implementazione di questo scenario richiederebbe l'hosting del flusso di lavoro in WorkflowServiceHost e l'uso delle attività di messaggistica. Richiede inoltre la correlazione basata su orderId
per garantire che gli aggiornamenti vengano eseguiti nel flusso di lavoro corretto.
Configurazione semplificata
Lo schema di configurazione WCF è complesso e offre agli utenti molte funzionalità difficili da trovare. In .NET Framework 4.6.1 è stato illustrato come aiutare gli utenti WCF a configurare i propri servizi con le funzionalità seguenti:
Rimozione della necessità di una configurazione esplicita per servizio. Se non si configurano elementi <del servizio> per il servizio e il servizio non definisce a livello di codice alcun endpoint, un set di endpoint verrà aggiunto automaticamente al servizio, uno per ogni indirizzo di base del servizio e per contratto implementato dal servizio.
Consente all'utente di definire i valori predefiniti per associazioni e comportamenti WCF, che verranno applicati ai servizi senza alcuna configurazione esplicita.
Gli endpoint standard definiscono endpoint preconfigurati riutilizzabili, con valori fissi per una o più proprietà dell'endpoint (indirizzo, associazione e contratto) e consentono di definire proprietà personalizzate.
Infine, ConfigurationChannelFactory<TChannel> consente di eseguire la gestione centrale della configurazione client WCF, utile negli scenari in cui la configurazione viene selezionata o modificata dopo il tempo di caricamento del dominio applicazione.
Come iniziare
Miglioramenti della configurazione del servizio in .NET Framework 4
Errore utente comune in .NET 4: Digitazione errata del nome di configurazione del servizio WF/WCF
Scenari di configurazione semplificati
Uno sviluppatore ASMX esperto vuole iniziare a usare WCF. Tuttavia, WCF sembra troppo complicato! Quali sono tutte le informazioni necessarie per scrivere in un file di configurazione? In .NET 4 è anche possibile decidere di non avere un file di configurazione.
Un set esistente di servizi WCF è molto difficile da configurare e gestire. Il file di configurazione ha migliaia di righe di codice XML estremamente pericolose da toccare. L'aiuto è necessario per ridurre la quantità di codice a una dimensione più gestibile.
Risolutore del contratto di dati
In .NET Framework 3.5 esistono alcune limitazioni nella progettazione di tipi noti:
Non è possibile aggiungere tipi noti in modo dinamico, durante la serializzazione o la deserializzazione.
I serializzatori non possono gestire informazioni xsi:type sconosciute.
Non era possibile per gli utenti specificare quale xsi:type desiderassero far apparire sul filo, ad esempio, per ridurre le dimensioni di un'istanza di serializzazione.
DataContractResolver risolve questi problemi in .NET Framework 4.5.
Come iniziare
Esempi:
Scenari di risoluzione del contratto dati
Evitare di dover dichiarare decine di KnownTypeAttribute oggetti in un servizio.
Riduzione delle dimensioni del BLOB XML.
Diagramma di flusso
Il diagramma di flusso è un paradigma noto per rappresentare visivamente i problemi di dominio. Si tratta di un nuovo stile di flusso di controllo che verrà introdotto in .NET Framework 4. Una caratteristica fondamentale del diagramma di flusso è che una sola attività viene eseguita in qualsiasi momento. I diagrammi di flusso possono esprimere cicli e risultati alternativi, ma non possono esprimere in modo nativo l'esecuzione simultanea di più nodi.
Come iniziare
In Visual Studio 2012 creare un'applicazione console del flusso di lavoro. Aggiungere un diagramma di flusso nella finestra di progettazione del flusso di lavoro.
La funzionalità diagramma di flusso usa le classi seguenti:
Esempi:
Documentazione del progettista:
Scenari del diagramma di flusso
Un'attività di diagramma di flusso può essere usata per implementare un gioco di indovinamento. Il gioco di ipotesi è molto semplice: il computer seleziona un numero casuale e il giocatore deve indovinare tale numero. Quando il giocatore invia ogni ipotesi, il computer mostra un suggerimento (ad esempio "prova un numero inferiore"). Se il giocatore trova il numero in meno di 7 tentativi, riceve una congratulazioni speciale dal computer. Questo gioco può essere implementato con una combinazione delle seguenti attività procedurali:
Attività procedurali (Sequence, If, ForEach, Switch, Assign, DoWhile e While)
Le attività procedurali forniscono un meccanismo per modellare il flusso di controllo sequenziale usando concetti familiari ai programmatori. Queste attività consentono costrutti di linguaggio di programmazione tradizionalmente strutturati e, se appropriato, offrono parità del linguaggio con linguaggi procedurali comuni, ad esempio C# e Visual Basic.
Come iniziare
In Visual Studio 2012 creare un'applicazione console del flusso di lavoro. Aggiungere attività procedurali nella finestra di progettazione del flusso di lavoro.
Esempi:
Documentazione del progettista:
Scenari di attività procedurali
Parallel: un sistema di gestione dei documenti Intranet dispone di un flusso di lavoro di approvazione dei documenti. I documenti devono essere approvati dagli utenti di diversi reparti prima di poter essere pubblicati nella intranet. Non esiste un ordine stabilito per le approvazioni; possono verificarsi in qualsiasi momento mentre il documento si trova nella fase di "approvazione in sospeso". Quando un utente invia un documento per la revisione, deve essere approvato dal responsabile diretto, dall'amministratore intranet e dal responsabile delle comunicazioni interne.
ParallelForEach<T>: un'applicazione WF gestisce gli acquisti aziendali all'interno di una grande azienda. Le regole aziendali determinano che prima di pianificare qualsiasi operazione di acquisto, sono necessarie le valutazioni di tre fornitori diversi. Un dipendente del reparto acquisti seleziona tre fornitori dall'elenco dei fornitori dell'azienda. Dopo che questi fornitori sono stati selezionati e informati, l'azienda attenderà le loro proposte economiche. Le proposte possono venire in qualsiasi ordine. Per implementare questo scenario in WF, utilizziamo un ParallelForEach<T> che scorrerà la nostra raccolta di fornitori e chiederà le loro proposte economiche. Dopo aver raccolto tutte le offerte, la migliore è selezionata e visualizzata.
InvokeMethod
L'attività InvokeMethod consente di richiamare metodi pubblici in oggetti o tipi nel contesto. Supporta la chiamata di metodi statici e di istanza con o senza parametri (incluse matrici di parametri) e metodi generici. Consente anche l'esecuzione del metodo in modo sincrono e asincrono.
Come iniziare
In Visual Studio 2012 creare un'applicazione console del flusso di lavoro. Aggiungere un'attività InvokeMethod nella finestra di progettazione del flusso di lavoro e configurare i metodi statici e di istanza.
Documentazione della finestra di progettazione: ActivityDesigner InvokeMethod
Scenari InvokeMethod
È necessario richiamare un metodo in un oggetto d'ambito. Ad esempio, è necessario aggiungere un valore a un dizionario. Viene richiamato il metodo Add dell'istanza del dizionario e viene fornita la chiave e il valore.
È necessario richiamare un metodo su un oggetto CLR legacy. Anziché creare un'attività personalizzata per incapsulare la chiamata a tale classe legacy, se è nell'ambito durante l'esecuzione del flusso di lavoro, InvokeMethod può essere utilizzato.
Attività di gestione degli errori
L'attività TryCatch fornisce un meccanismo per intercettare le eccezioni che si verificano durante l'esecuzione di un set di attività contenute (simile al costrutto Try/Catch in C# e Visual Basic). TryCatch fornisce la gestione delle eccezioni a livello di flusso di lavoro. Quando viene generata un'eccezione non gestita, il flusso di lavoro viene interrotto e il blocco Finally non verrà eseguito. Questo comportamento è coerente con C#.
Come iniziare
In Visual Studio 2012 creare un'applicazione console del flusso di lavoro. Aggiungere un'attività TryCatch nella finestra di progettazione del flusso di lavoro.
Esempio: Gestione delle eccezioni in un'attività di diagramma di flusso tramite TryCatch
Documentazione del progettista: Progettatori di attività di gestione degli errori
Scenari di gestione degli errori
È necessario eseguire un set di attività e deve essere eseguita una logica specifica quando si verifica un errore. Se durante la logica di gestione degli errori viene rilevato che l'errore non è recuperabile, l'eccezione verrà rilanciata e l'attività principale (o l'host) gestirà il problema.
Seleziona attività
L'attività Pick fornisce la modellazione del flusso di controllo basata su eventi in WF. Pick contiene molti rami in cui ogni ramo attende che si verifichi un determinato evento prima di essere eseguito. In questa configurazione, un Pick si comporta in modo simile a un Switch<T>, per cui l'attività eseguirà solo uno degli eventi dell'insieme a cui sta ascoltando. Ogni ramo è basato su eventi e l'evento che si verifica esegue prima il ramo corrispondente. Tutti gli altri rami annullano e interrompono l'ascolto degli eventi.
Come iniziare
In Visual Studio 2012 creare un'applicazione console del flusso di lavoro. Aggiungere un'attività Pick nella finestra di progettazione del flusso di lavoro.
Esempio: uso dell'attività Pick
Documentazione della finestra di progettazione: Progettazione attività di selezione
Seleziona Scenario
Un utente deve essere richiesto di immettere. In circostanze normali, lo sviluppatore userà una chiamata al metodo come ReadLine per richiedere l'input di un utente. Il problema con questa configurazione è che il programma attende fino a quando l'utente non immette qualcosa. In questo scenario è necessario un timeout per sbloccare un'attività di blocco. Uno scenario comune è quello che richiede il completamento di un'attività entro un determinato periodo di tempo. Il timeout di un'attività di blocco è uno scenario in cui Pick aggiunge un sacco di valore.
Servizio di routing WCF
Il servizio di routing è progettato per essere un router software generico che consente di controllare il flusso dei messaggi WCF tra i client e i servizi. Il servizio di routing consente di separare i client dai servizi, che offre una maggiore libertà in termini di configurazioni che è possibile supportare e la flessibilità che si ha quando si valuta come ospitare i servizi. In .NET Framework 3.5, i client e i servizi erano strettamente associati; un cliente doveva conoscere tutti i servizi necessari per parlare con e dove si trovavano. WCF in .NET Framework 3.5 presenta inoltre le limitazioni seguenti:
La gestione degli errori era complessa, poiché questa logica doveva essere incorporata direttamente nel client.
I clienti e i servizi dovevano usare sempre gli stessi collegamenti.
I servizi sono stati raramente ben fattoriti: è più facile fare in modo che il client parli con un solo servizio che implementa tutto, anziché dover scegliere tra più servizi.
Il servizio di routing in .NET 4 è progettato per semplificare la risoluzione di questi problemi. Il nuovo servizio di routing offre le funzionalità seguenti:
Routing basato sul contenuto (MessageFilter gli oggetti esaminano un messaggio per determinare dove deve essere inviato).
Collegamento del protocollo (trasporto e messaggio)
Gestione degli errori (il router intercetta le eccezioni di comunicazione e esegue il failover agli endpoint di backup)
Aggiornamento dinamico (in memoria) di MessageFilterTable<TFilterData> e della configurazione del routing.
Come iniziare
Documentazione: Routing
Esempi: Servizi di routing [Esempi WCF]
Blog: Regole di routing!
Scenari di routing
Il servizio di routing è utile negli scenari seguenti:
I client possono comunicare con più servizi senza doverli gestire direttamente.
I client possono eseguire logica aggiuntiva su una richiesta client per determinare dove indirizzarlo
Scomporre le operazioni eseguite da un client in più implementazioni del servizio senza effettuare il refactoring del client.
I client e i servizi possono utilizzare associazioni diverse con impostazioni di sicurezza diverse.
I client possono essere abilitati per essere più affidabili in caso di errore o indisponibilità dei servizi.
Scoperta WCF
La scoperta WCF è una tecnologia quadro che consente di integrare un meccanismo di scoperta nell'infrastruttura della tua applicazione. È possibile usarlo per rendere individuabile il servizio e configurare i client per la ricerca dei servizi. I client non devono più essere preconfigurati con l'endpoint, rendendo l'applicazione più affidabile e tollerante agli errori. L'individuazione è la piattaforma perfetta per creare funzionalità di configurazione automatica nella tua applicazione.
Il prodotto è basato sullo standard WS-Discovery. È progettato per essere interoperabile, estendibile e generico. Il prodotto supporta due modalità di funzionamento:
Gestito: dove è presente un'entità nella rete con informazioni sui servizi esistenti, i client la interrogano direttamente per ottenere informazioni. Questo è analogo ad Active Directory.
Ad hoc: dove i client usano messaggi multicast per individuare i servizi.
Inoltre, i messaggi di individuazione sono indipendenti dal protocollo di rete; è possibile usarli su qualsiasi protocollo che supporti i requisiti di modalità. Ad esempio, i messaggi multicast di individuazione possono essere inviati tramite il canale UDP o qualsiasi altra rete che supporta la messaggistica multicast. Questi punti di progettazione, combinati con la flessibilità delle funzionalità, consentono di adattare l'individuazione specificamente alla soluzione.
Come iniziare
Documentazione: WCF Discovery
Esempi: individuazione (esempi)
Scenari di scoperta
Un sviluppatore non vuole hardcodificare gli endpoint, poiché non si sa quando il mio servizio sarà disponibile. Lo sviluppatore vuole invece scegliere un servizio in fase di esecuzione. Tra i componenti dell'applicazione sono necessari più disaccoppiamento, affidabilità e configurazione automatica.
Tracciamento
Il rilevamento del flusso di lavoro fornisce informazioni dettagliate sull'esecuzione di un'istanza del flusso di lavoro. Gli eventi di rilevamento vengono generati da un flusso di lavoro a livello di istanza del flusso di lavoro e quando vengono eseguite le attività all'interno del flusso di lavoro. È necessario aggiungere un partecipante al monitoraggio del flusso di lavoro all'host del flusso di lavoro per iscriversi ai record di monitoraggio. I record di rilevamento vengono filtrati usando un profilo di rilevamento. .NET Framework fornisce un partecipante per il tracciamento ETW (Event Tracing for Windows) e viene installato un profilo di base nel file machine.config.
Come iniziare
In Visual Studio 2010 creare un progetto applicazione del servizio flusso di lavoro WCF. Una Receive e una SendReply verranno inserite nell'area di disegno per iniziare.
Apri il web.config e aggiungi un comportamento di tracciamento ETW senza profilo.
Viene usato il profilo predefinito.
Aprire il visualizzatore eventi e abilitare il canale analitico nel nodo seguente: Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, Application Server-Applications. Fare clic con il pulsante destro del mouse su Analitico e scegliere Abilita log.
Eseguire il servizio di flusso di lavoro.
Osservare gli eventi di rilevamento del flusso di lavoro nel Visualizzatore eventi.
Esempi: rilevamento
Documentazione concettuale: Rilevamento e traccia del flusso di lavoro
Archivio di istanze del flusso di lavoro SQL
SqlWorkflowInstanceStore è un'implementazione basata su SQL Server di un archivio di istanze. Un archivio di istanze archivia lo stato di un'istanza in esecuzione insieme a tutti i dati necessari per caricare e riprendere l'istanza. L'host del servizio indica all'archivio di istanze di salvare lo stato dell'istanza se il flusso di lavoro persiste e indica all'archivio di istanze di caricare lo stato dell'istanza quando un messaggio arriva per tale istanza o una scadenza di un'attività di ritardo.
Come iniziare
In Visual Studio 2012 creare un flusso di lavoro contenente un'attività implicita o esplicita Persist . Aggiungi il comportamento SqlWorkflowInstanceStore all'host del servizio flusso di lavoro. Questa operazione può essere eseguita nel codice o nel file di configurazione dell'applicazione.
Esempi: persistenza
Documentazione concettuale: Archivio di istanze del flusso di lavoro SQL.