Condividi tramite


Interni del servizio di hosting per flussi di lavoro

WorkflowServiceHost fornisce un host per i servizi di flusso di lavoro. È responsabile dell'ascolto dei messaggi in entrata e del loro routing all'istanza del servizio di flusso di lavoro appropriata, controlla lo scaricamento e la persistenza dei flussi di lavoro inattivi, e altro. In questo argomento viene descritto come WorkflowServiceHost elabora i messaggi in arrivo.

Panoramica di WorkflowServiceHost

La WorkflowServiceHost classe viene usata per ospitare i servizi del flusso di lavoro. È in ascolto dei messaggi in arrivo e li instrada all'istanza del servizio appropriata, creando nuove istanze o caricando istanze esistenti da un archivio durevole in base alle esigenze. Il diagramma seguente illustra come WorkflowServiceHost funziona:

Diagramma che mostra la panoramica del Workflow Service Host.

Questo diagramma mostra che WorkflowServiceHost carica le definizioni del servizio flusso di lavoro dai file con estensione xamlx e carica le informazioni di configurazione da un file di configurazione. Carica anche la configurazione di tracciamento dal profilo di monitoraggio. WorkflowServiceHost espone un endpoint di controllo del flusso di lavoro che consente di inviare operazioni di controllo alle istanze del flusso di lavoro. Per altre informazioni, vedere Esempio di endpoint di controllo del flusso di lavoro.

WorkflowServiceHost espone anche gli endpoint dell'applicazione in ascolto dei messaggi dell'applicazione in ingresso. Quando arriva un messaggio, viene inviato all'istanza del servizio del flusso di lavoro appropriata (se è attualmente caricata). Se necessario, viene creata una nuova istanza del flusso di lavoro. In alternativa, se un'istanza esistente è stata salvata in modo permanente, viene caricata dall'archivio di persistenza.

Dettagli di WorkflowServiceHost

Il diagramma seguente mostra come WorkflowServiceHost gestisce i messaggi in modo più dettagliato:

Diagramma che mostra il flusso di messaggi dell'host del servizio Workflow.

Questo diagramma mostra tre endpoint diversi, un endpoint dell'applicazione, un endpoint di controllo del flusso di lavoro e un endpoint di hosting del flusso di lavoro. L'endpoint dell'applicazione riceve messaggi associati a un'istanza del flusso di lavoro specifica. L'endpoint di controllo del flusso di lavoro è in ascolto delle operazioni di controllo. L'endpoint di hosting del flusso di lavoro è in ascolto dei messaggi che fanno sì che WorkflowServiceHost carichi ed esegua flussi di lavoro non di servizio. Come illustrato nel diagramma, tutti i messaggi vengono elaborati tramite il runtime WCF. La limitazione dell'istanza del servizio flusso di lavoro viene ottenuta usando la MaxConcurrentInstances proprietà . Questa proprietà limiterà il numero di istanze del servizio flusso di lavoro simultanee. Quando questa limitazione viene superata, tutte le richieste aggiuntive per le nuove istanze di servizio del flusso di lavoro o le richieste di attivazione delle istanze di flusso di lavoro persistenti verranno accodate. Le richieste in coda vengono elaborate in ordine FIFO indipendentemente dal fatto che siano richieste per una nuova istanza o un'istanza persistente in esecuzione. Vengono caricate le informazioni sui criteri host che determinano come vengono gestite le eccezioni non intercettate e come i servizi del flusso di lavoro inattivo vengono scaricati e salvati in modo permanente. Per maggiori informazioni su questi argomenti, vedere Configurare il comportamento delle eccezioni non gestite del flusso di lavoro con WorkflowServiceHost e Configurare il comportamento inattivo con WorkflowServiceHost. Le istanze del flusso di lavoro vengono rese persistenti in base ai criteri host e vengono ricaricate quando necessario. Per altre informazioni sulla persistenza del flusso di lavoro, vedere Procedura: Configurare la persistenza con WorkflowServiceHost, Creazione di un servizio flusso di lavoro con esecuzione prolungata e Persistenza del flusso di lavoro.

La figura seguente mostra il flusso quando viene chiamato WorkflowServiceHost.Open:

Diagramma che mostra il flusso quando viene chiamato WorkflowServiceHost.Open.

Il flusso di lavoro viene caricato da XAML e viene creato l'albero delle attività. WorkflowServiceHost percorre l'albero delle attività e crea la descrizione del servizio. La configurazione viene applicata all'host. Infine, l'host inizia ad ascoltare i messaggi in arrivo.

La figura seguente mostra le operazioni che esegue WorkflowServiceHost quando riceve un messaggio associato per un'attività Receive con CanCreateInstance impostata su true:

Albero delle decisioni usato dall'host WFS quando riceve un messaggio e CanCreateInstance è true.

Il messaggio arriva e viene elaborato dallo stack di canali WCF. Vengono controllati i regolatori e le query di correlazione vengono eseguite. Se il messaggio è associato a un'istanza esistente, viene recapitato. Se è necessario creare una nuova istanza, viene controllata la proprietà CanCreateInstance dell'attività Receive. Se è impostato su true, viene creata una nuova istanza e il messaggio viene recapitato.

La figura seguente mostra le operazioni che esegue WorkflowServiceHost quando riceve un messaggio destinato a un'attività Receive quando CanCreateInstance è impostata su false.

Albero delle decisioni usato dall'host WFS quando riceve un messaggio e CanCreateInstance è false.

Il messaggio arriva e viene elaborato dallo stack di canali WCF. Vengono controllati i regolatori e le query di correlazione vengono eseguite. Il messaggio è associato a un'istanza esistente (perché CanCreateInstance è false) in modo che l'istanza venga caricata dall'archivio di persistenza, il segnalibro viene ripreso e il flusso di lavoro viene eseguito.

Avvertimento

L'host del servizio flusso di lavoro non si aprirà se SQL Server è configurato per l'ascolto solo sul protocollo Named Pipe.

Vedere anche