Panoramica dei servizi flusso di lavoroWorkflow Services Overview

Servizi flusso di lavoro sono servizi basati su WCF implementati mediante flussi di lavoro.Workflow services are WCF-based services that are implemented using workflows. Servizi flusso di lavoro sono flussi di lavoro che usano le attività di messaggistica per inviare e ricevere messaggi di Windows Communication Foundation (WCF).Workflow services are workflows that use the messaging activities to send and receive Windows Communication Foundation (WCF) messages. .NET Framework 4.5 introduce una serie di attività di messaggistica che consentono di inviare e ricevere messaggi da un flusso di lavoro..NET Framework 4.5 introduces a number of messaging activities that allow you send and receive messages from within a workflow. Per ulteriori informazioni sulle attività di messaggistica e come possono essere utilizzati per implementare modelli di scambio di messaggi diversi, vedere attività di messaggistica.For more information about messaging activities and how they can be used to implement different message exchange patterns, see Messaging Activities.

Vantaggi derivanti dall'utilizzo dei servizi flusso di lavoroBenefits of Using Workflow Services

Con l'aumento del livello di distribuzione delle applicazioni, i singoli servizi divengono responsabili delle chiamate ad altri servizi per la ripartizione di parte del carico di lavoro.As applications become increasingly distributed, individual services become responsible for calling other services to offload some of the work. L'implementazione di queste chiamate come operazioni asincrone introduce un livello di complessità nel codice.Implementing these calls as asynchronous operations introduces some complexity into the code. La gestione degli errori aggiunge ulteriore complessità con la gestione delle eccezioni e fornendo informazioni di rilevamento dettagliate.Error handling adds additional complexity in the form of handling exceptions and providing detailed tracking information. Alcuni servizi presentano spesso un'esecuzione prolungata e possono impegnare risorse di sistema utili in attesa dell'input.Some services are often long running and can take up valuable system resources while waiting for input. A causa di questi problemi, le applicazioni distribuite risultano spesso molto complesse e difficili da scrivere e gestire.Because of these issues, distributed applications are often very complex and difficult to write and maintain. I flussi di lavoro rappresentano un metodo naturale per esprimere la coordinazione del lavoro asincrono, soprattutto per quanto riguarda le chiamate ai servizi esterni.Workflows are a natural way to express the coordination of asynchronous work, especially calls to external services. I flussi di lavoro risultano inoltre efficaci nel rappresentare processi aziendali con esecuzione prolungata.Workflows are also effective at representing long-running business processes. Sono queste qualità che rendono il flusso di lavoro una risorsa essenziale per la compilazione di servizi in un ambiente distribuito.It is these qualities that make the workflow a great asset to building services in a distributed environment.

Implementazione di un servizio flusso di lavoroImplementing a Workflow Service

Quando si implementa un servizio WCF, si definisce un numero di contratti che descrivono il servizio e i dati inviati e ricevuti.When implementing a WCF service, you define a number of contracts that describe the service and the data that it sends and receives. I dati vengono rappresentati come contratti dati e contratti di messaggio.The data is represented as data contracts and message contracts. I servizi flusso di lavoro e WFC usano definizioni del contratto dati e del contratto messaggio nell'ambito delle descrizioni del servizio.Both WCF and workflow services use data contract and message contract definitions as part of service descriptions. Il servizio stesso espone metadati (nel formato WSDL) per descrivere le operazioni del servizio.The service itself exposes metadata (in the form of WSDL) to describe the operations of the service. In WCF i contratti di servizio e i contratti di operazione definiscono il servizio e le operazioni supportate.In WCF, service contracts and operation contracts define the service and the operations it supports. Tuttavia in un servizio flusso di lavoro questi contratti rientrano nel processo aziendale stesso.However in a workflow service, these contracts are part of the business process itself. Vengono esposti nei metadati da un processo denominato inferenza del contratto.They are exposed in metadata by a process called contract inference. Se un servizio flusso di lavoro viene ospitato mediante WorkflowServiceHost, viene esaminata la definizione del flusso di lavoro e viene generato un contratto in base al set delle attività di messaggistica rilevato nel flusso di lavoro.When a workflow service is hosted using WorkflowServiceHost, the workflow definition is examined and a contract is generated based on the set of messaging activities found in the workflow. In particolare vengono usate le attività e le proprietà indicate di seguito per generare il contratto:In particular, the following activities and properties are used to generate the contract:

Attività ReceiveReceive Activity

  • ServiceContractName

  • `System.ServiceModel.Activities.Receive.OperationContractName`
  • Action

  • `System.ServiceModel.Activities.Receive.ValueType`

Attività SendReplySendReply Activity

  • Action

  • xref:System.ServiceModel.Activities.SendReply.ValueType

Attività TransactedReceiveScopeTransactedReceiveScope Activity

Il risultato finale di inferenza del contratto è una descrizione del servizio utilizzando le stesse strutture di dati come servizi WCF e contratti di operazione.The end result of contract inference is a description of the service using the same data structures as WCF services and operation contracts. Queste informazioni vengono quindi usate per esporre WSDL per il servizio flusso di lavoro.This information is then used to expose WSDL for the workflow service.

Nota

.NET Framework 4.6.1.NET Framework 4.6.1 non consente di scrivere servizi flusso di lavoro usando una definizione del contratto esistente senza il supporto di strumenti aggiuntivi. does not allow you to write workflow services using an existing contract definition without some additional tooling support. I contratti del servizio flusso di lavoro vengono creati dal processo di inferenza del contratto illustrato in precedenza.Workflow service contracts are created by the contract inference process discussed previously. I contratti di messaggio e i contratti dati sono tuttavia completamente supportati.Message contracts and data contracts are fully supported, however.

Servizi flusso di lavoro e associazioni basate su MSMQWorkflow Services and MSMQ-Based Bindings

WCF definisce due associazioni NetMsmqBinding e MsmqIntegrationBinding basate su MSMQ.WCF defines two MSMQ-based bindings NetMsmqBinding and MsmqIntegrationBinding. Le associazioni basate su MSMQ vengono spesso usate con i servizi flusso di lavoro, poiché tali servizi presentano un'esecuzione prolungata.MSMQ-based bindings are often used with workflow services because of the long-running nature of such services. Le associazioni basate su MSMQ dispongono di una proprietà ValidityDuration che specifica per quanto tempo i messaggi MSMQ possono essere ritenuti validi.The MSMQ-based bindings have a ValidityDuration property that specifies how long MSMQ messages can assume to be valid. A causa della natura prolungata dei servizi flusso di lavoro, la durata di validità di un messaggio MSMQ potrebbe scadere prima che il servizio flusso di lavoro possa elaborarlo.Because of the long running nature of workflow services it is possible that the validity duration of a MSMQ message may elapse before the workflow service can process it. È pertanto estremamente importante impostare la durata di validità di un'associazione MSMQ su un valore appropriato.It is therefore very important to set the validity duration of a MSMQ binding to an appropriate value. Questo valore deve essere scelto in base al flusso di lavoro e alla relativa modalità di elaborazione dei messaggi.This value must be chosen based on the workflow and how it processes messages. Se ad esempio si dispone di un flusso di lavoro con un'attività Receive seguita da un'attività personalizzata con tempo di esecuzione pari a 10 minuti, seguita da un'altra attività Receive, il valore corretto per ValidityDuration dovrà essere superiore a 10 minuti.For example if you have a workflow with a Receive activity followed by a custom activity that takes 10 minutes to run, followed by another Receive activity, the correct value for ValidityDuration would be greater than 10 minutes.

Hosting di un servizio flusso di lavoroHosting a Workflow Service

Ad esempio i servizi WCF, servizi flussi di lavoro devono essere ospitati.Like WCF services, workflow services must be hosted. Utilizzo dei servizi WCF la ServiceHost classe per ospitare servizi e del flusso di lavoro servizi utilizzano WorkflowServiceHost per ospitare i servizi.WCF services use the ServiceHost class to host services and workflow services use WorkflowServiceHost to host services. Ad esempio i servizi WCF, servizi flussi di lavoro possono essere ospitati in diversi modi, ad esempio:Like WCF services, workflow services can be hosted in a variety of ways, for example:

  • in un'applicazione .NET Framework.NET Framework gestita;In a managed .NET Framework.NET Framework application.

  • In Internet Information Services (IIS).In Internet Information Services (IIS).

  • nel servizio Attivazione Processo Windows (WAS, Windows Process Activation Service);In Windows Process Activation Service (WAS).

  • in un servizio Windows gestito.In a managed Windows Service.

I servizi flusso di lavoro ospitati in un'applicazione .NET Framework.NET Framework o in un servizio Windows gestito creano un'istanza della classe WorkflowServiceHost e la passano a un'istanza di WorkflowService che contiene la definizione del flusso di lavoro all'interno della proprietà Body.Workflow services hosted in a managed .NET Framework.NET Framework application or a managed Windows service create an instance of the WorkflowServiceHost class and pass it an instance of the WorkflowService that contains the workflow definition within the Body property. Una definizione del flusso di lavoro contenente le attività di messaggistica viene esposta come servizio flusso di lavoro.A workflow definition that contains messaging activities is exposed as a workflow service.

Per ospitare un servizio flusso di lavoro in IIS o WAS, posizionare il file con estensione xamlx contenente la definizione del servizio flusso di lavoro in una directory virtuale.To host a workflow service in IIS or WAS, place the .xamlx file that contains the workflow service definition into a virtual directory. Un endpoint predefinito (mediante BasicHttpBinding) viene creato automaticamente per altre informazioni, vedere configurazione semplificata.A default endpoint (using BasicHttpBinding) is created automatically For more information, see Simplified Configuration. È anche possibile posizionare un file Web.config nella directory virtuale per specificare specifici endpoint.You can also place a Web.config file in the virtual directory to specify your own endpoints. Se la definizione del flusso di lavoro si trova in un assembly, è possibile posizionare un file con estensione svc nella directory virtuale e l'assembly del flusso di lavoro nella directory App_Code.If your workflow definition is in an assembly you can place a .svc file in the virtual directory and the workflow assembly in the App_Code directory. Il file con estensione svc deve specificare la factory di host del servizio e la classe che implementa il servizio flusso di lavoro.The .svc file must specify the service host factory and the class that implements the workflow service. Nell'esempio seguente viene mostrato come specificare la factory di host del servizio e la classe che implementa il servizio flusso di lavoro.The following example shows how to specify the service host factory and specify the class that implements the workflow service.

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