Condividi tramite


Estensibilità host del servizio flusso di lavoro

Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.

.NET Framework versione 4 fornisce la classe WorkflowServiceHost per ospitare i servizi flusso di lavoro. Questa classe viene utilizzata in caso di hosting automatico di un servizio flusso di lavoro in un'applicazione gestita o un servizio Windows. La classe viene inoltre utilizzata quando si ospita un servizio flusso di lavoro con IIS (Internet Information Services) o con il servizio Attivazione Processo Windows (WAS, Windows Process Activation Service). La classe WorkflowServiceHost fornisce punti di estensione che consentono di aggiungere estensioni personalizzate, modificare il comportamento inattivo e ospitare flussi di lavoro non di servizi (ovvero che non utilizzano attività di messaggistica). Per un esempio di modifica del comportamento inattivo, vedere How To: Control Idle Behavior Through Extensibility.

Estensioni host del servizio flusso di lavoro

WorkflowServiceHost contiene una proprietà WorkflowExtensions di tipo WorkflowInstanceExtensionManager che fornisce un metodo per l'aggiunta di estensioni a WorkflowServiceHost. Utilizzare il metodo Add per aggiungere un'estensione per ogni istanza del servizio flusso di lavoro. Il delegato specificato viene chiamato per creare una nuova estensione quando un'istanza del servizio flusso di lavoro viene creata o caricata da un archivio di persistenza. Utilizzare il metodo Add per aggiungere un'estensione per ogni host del servizio flusso di lavoro. Un'istanza dell'estensione viene condivisa per tutte le istanze del servizio flusso di lavoro.

Reazione alle eccezioni non gestite

WorkflowUnhandledExceptionBehavior consente di specificare l'azione da eseguire quando si verifica un'eccezione non gestita in un servizio flusso di lavoro. La proprietà Action specifica uno dei valori WorkflowUnhandledExceptionAction:

  • Abandon - Interrompe l'istanza del servizio flusso di lavoro.

  • AbandonAndSuspend - Esegue il rollback all'ultimo stato persistente e sospende l'istanza del servizio flusso di lavoro. Questo caso si verifica solo se il flusso di lavoro è già stato reso persistente almeno una volta. In caso contrario, l'istanza del flusso di lavoro viene interrotta.

  • Cancel - Annulla l'istanza.

  • Terminate - Termina l'istanza.

È possibile configurare questo comportamento nel codice, come indicato nell'esempio seguente.

host.Description.Behaviors.Add(new WorkflowUnhandledExceptionBehavior { Action = WorkflowUnhandledExceptionAction.Abandon });

È inoltre possibile configurarlo in un file di configurazione, come indicato nell'esempio seguente.

<behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
          <workflowUnhandledExceptionBehavior action="Abandon" />      
        </behavior>
      </serviceBehaviors>

Hosting di flussi di lavoro non di servizi

È possibile utilizzare WorkflowServiceHost per ospitare flussi di lavoro non di servizi, che non iniziano con un'attività Receive o che non utilizzano le attività di messaggistica. I servizi flusso di lavoro iniziano in genere con un'attività Receive. Se WorkflowServiceHost riceve un messaggio per un servizio flusso di lavoro, viene creata una nuova istanza del servizio flusso di lavoro (se non è già in esecuzione o non è stata già resa persistente). Se un flusso di lavoro non inizia con un'attività Receive, non può essere avviato inviando un messaggio, poiché non è presente alcuna attività che riceva il messaggio. Per ospitare un flusso di lavoro non di servizio, derivare una classe da WorkflowHostingEndpoint ed eseguire l'override di OnGetInstanceId, OnGetCreationContext e OnResolveBookmark. Eseguire l'override di OnGetInstanceId se si desidera fornire un ID istanza preferito. Eseguire l'override di OnGetCreationContext per creare un contesto di creazione di flusso di lavoro personalizzato o popolare un'istanza dell'elemento WorkflowCreationContext esistente. Eseguire l'override di OnResolveBookmark per estrarre manualmente il segnalibro dal messaggio in ingresso. Per creare una nuova istanza di un flusso di lavoro non di servizio, dichiarare un contratto di servizio che definisce un'operazione in grado di creare una nuova istanza. L'operazione di creazione deve utilizzare un elemento IDictionary<string, object> per passare qualsiasi parametro di flusso di lavoro obbligatorio. Questo contratto viene implementato in modo implicito dalla classe derivata da WorkflowHostingEndpoint. In fase di hosting del flusso di lavoro, aggiungere un'istanza della classe derivata da WorkflowHostingEndpoint all'host chiamando AddServiceEndpoint e chiamare Open. Per creare un'istanza del flusso di lavoro, creare un elemento ChannelFactory del tipo di contratto di servizio e chiamare CreateChannel. È quindi possibile chiamare l'operazione di creazione definita nel contratto di servizio.

Vedere anche

Concetti

Utilizzo delle attività di messaggistica

Altre risorse

Servizi flusso di lavoro