Condividi tramite


Panoramica dei servizi di flusso di lavoro

I servizi flusso di lavoro sono servizi basati su WCF implementati tramite flussi di lavoro. I servizi flusso di lavoro sono flussi di lavoro che usano le attività di messaggistica per inviare e ricevere messaggi di Windows Communication Foundation (WCF). .NET Framework 4.5 introduce una serie di attività di messaggistica che consentono di inviare e ricevere messaggi dall'interno di un flusso di lavoro. Per altre informazioni sulle attività di messaggistica e su come possono essere usate per implementare modelli di scambio di messaggi diversi, vedere Attività di messaggistica.

Vantaggi dell'uso dei servizi flusso di lavoro

Man mano che le applicazioni diventano sempre più distribuite, i singoli servizi diventano responsabili della chiamata di altri servizi per l'offload di parte del lavoro. L'implementazione di queste chiamate come operazioni asincrone introduce una certa complessità nel codice. La gestione degli errori aggiunge complessità aggiuntiva sotto forma di gestione delle eccezioni e fornisce informazioni dettagliate sul rilevamento. Alcuni servizi sono spesso a esecuzione prolungata e possono richiedere risorse di sistema preziose durante l'attesa dell'input. A causa di questi problemi, le applicazioni distribuite sono spesso molto complesse e difficili da scrivere e gestire. I flussi di lavoro sono un modo naturale per esprimere il coordinamento del lavoro asincrono, in particolare le chiamate a servizi esterni. I flussi di lavoro sono efficaci anche per rappresentare processi aziendali a esecuzione prolungata. Si tratta di queste qualità che rendono il flusso di lavoro un ottimo asset per la creazione di servizi in un ambiente distribuito.

Implementazione di un servizio di flusso di lavoro

Quando si implementa un servizio WCF, si definiscono diversi contratti che descrivono il servizio e i dati inviati e ricevuti. I dati sono rappresentati come contratti di dati e contratti di messaggio. I servizi WCF e i servizi di flusso di lavoro utilizzano le definizioni di contratto di dati e di contratto di messaggio come parte delle descrizioni dei servizi. Il servizio stesso espone i metadati (sotto forma di WSDL) per descrivere le operazioni del servizio. In WCF i contratti di servizio e i contratti di operazione definiscono il servizio e le operazioni supportate. Tuttavia, in un servizio flusso di lavoro, questi contratti fanno parte del processo aziendale stesso. Vengono esposti nei metadati attraverso un processo denominato inferenza del contratto. Quando un servizio flusso di lavoro viene ospitato usando WorkflowServiceHost, la definizione del flusso di lavoro viene esaminata e viene generato un contratto in base al set di attività di messaggistica presenti nel flusso di lavoro. In particolare, per generare il contratto vengono usate le attività e le proprietà seguenti:

Receive Attività

SendReply Attività

TransactedReceiveScope Attività

Il risultato finale dell'inferenza del contratto è una descrizione del servizio usando le stesse strutture di dati dei servizi WCF e dei contratti di operazione. Queste informazioni vengono quindi usate per esporre WSDL per il servizio flusso di lavoro.

Annotazioni

.NET Framework 4.6.1 non consente di scrivere servizi flusso di lavoro usando una definizione di contratto esistente senza un supporto aggiuntivo per gli strumenti. I contratti di servizio del flusso di lavoro vengono creati dal processo di inferenza del contratto descritto in precedenza. I contratti di messaggio e i contratti dati sono tuttavia completamente supportati.

Servizi flusso di lavoro e associazioni basate su MSMQ

WCF definisce due associazioni NetMsmqBinding basate su MSMQ e MsmqIntegrationBinding. Le binding basate su MSMQ vengono spesso utilizzate con i servizi di flusso di lavoro per via della loro natura a esecuzione prolungata. Le associazioni basate su MSMQ hanno una ValidityDuration proprietà che specifica per quanto tempo i messaggi MSMQ possono presupporre che siano validi. A causa della natura a esecuzione prolungata dei servizi del flusso di lavoro, è possibile che la durata di validità di un messaggio MSMQ possa trascorrere prima che il servizio flusso di lavoro possa elaborarlo. È quindi molto importante impostare la durata di validità di un'associazione MSMQ su un valore appropriato. Questo valore deve essere scelto in base al flusso di lavoro e al modo in cui elabora i messaggi. Ad esempio, se si dispone di un flusso di lavoro con un'attività Receive seguita da un'attività personalizzata che richiede 10 minuti per l'esecuzione, seguito da un'altra Receive attività, il valore corretto per ValidityDuration sarebbe maggiore di 10 minuti.

Ospitare un servizio di workflow

Analogamente ai servizi WCF, i servizi del flusso di lavoro devono essere ospitati. I servizi WCF usano la classe ServiceHost per ospitare i servizi e i servizi di flusso di lavoro usano WorkflowServiceHost per ospitare i servizi. Analogamente ai servizi WCF, i servizi flusso di lavoro possono essere ospitati in diversi modi, ad esempio:

  • In un'applicazione .NET Framework gestita.

  • In Servizi di informazione Internet (IIS).

  • In Windows Process Activation Service (WAS).

  • In un servizio Windows gestito.

I servizi di flusso di lavoro ospitati in un'applicazione gestita del .NET Framework o in un servizio di Windows gestito creano un'istanza della classe WorkflowServiceHost e le passano un'istanza di WorkflowService che contiene la definizione del flusso di lavoro all'interno della proprietà Body. Una definizione del flusso di lavoro che contiene attività di messaggistica viene esposta come servizio del flusso di lavoro.

Per ospitare un servizio flusso di lavoro in IIS o WAS, posizionare il file con estensione xamlx che contiene la definizione del servizio flusso di lavoro in una directory virtuale. Viene creato automaticamente un endpoint predefinito (usando BasicHttpBinding) Per altre informazioni, vedere Configurazione semplificata. È anche possibile inserire un file Web.config nella directory virtuale per specificare gli endpoint personalizzati. Se la definizione del flusso di lavoro si trova in un assembly, è possibile inserire un file con estensione svc nella directory virtuale e nell'assembly del flusso di lavoro nella directory App_Code. Il file con estensione .svc deve specificare la fabbrica host del servizio e la classe che implementa il servizio di flusso di lavoro. Nell'esempio seguente viene illustrato come specificare la factory host del servizio e specificare la classe che implementa il servizio flusso di lavoro.

<%@ServiceHost Factory="System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory"
Service="EchoService"%>