Domanda

Relativo a questa domanda.

Capisco come implementare il controllo delle versioni dei flussi di lavoro utilizzando WorkflowApplication.Se mantieni la definizione XAML originale per le versioni precedenti del tuo flusso di lavoro, puoi caricarle utilizzando il file right WorkflowApplication costruttore.

Come potresti assicurartelo? WorkflowServiceHost utilizza la definizione del flusso di lavoro corretta quando desideri ospitare i flussi di lavoro in IIS?

C'è un WorkflowServiceHost costruttore che puoi utilizzare per caricare una definizione del flusso di lavoro, ma quando esegui l'hosting all'interno di IIS tramite un file XAMLX, non chiami WorkflowServiceHost te stesso, questo viene gestito in qualche modo da IIS.Quindi, come posso assicurarmi che venga caricata la definizione corretta del flusso di lavoro per la versione corretta del mio flusso di lavoro?

È stato utile?

Soluzione

L'approccio che utilizza WorkflowServiceHost non è poi così diverso dall'utilizzo di WorkflowApplication.Si applicano ancora le nozioni di base per mantenere disponibili le varie versioni XAML(X).Pertanto, nel caso di WorkflowServiceHost è necessario creare più WorkflowServiceHost, ciascuno dei quali ospita una versione diversa del tuo XAMLX.Ognuno con un endpoint diverso.Quindi, fondamentalmente, un endpoint en indirizza sia un servizio del flusso di lavoro che la sua versione.

Quindi, come ottenere i messaggi dal client al WorkflowServiceHost corretto?Qui il servizio di routing WCF è tuo amico.Invece di far comunicare direttamente il client con WorkflowServiceHost, utilizzano un servizio di routing WCF intermedio.Questo a sua volta controlla i messaggi e li instrada al WorkflowServiceHost che ospita il file XAMLX appropriato.Allora come fa a saperlo?Esistono diversi modi per farlo.Ad esempio, eseguendo una ricerca nel database utilizzando un identificatore di correlazione dei messaggi con le richieste di nuovi flussi di lavoro che vanno sempre all'ultima versione.Il modo più semplice è fare in modo che il servizio del flusso di lavoro restituisca un numero di versione come parte della richiesta iniziale e lo renda una parte obbligatoria di ogni richiesta successiva.In questo modo il servizio di routing WCF può eseguire tutte le sue operazioni solo con l'invio dei dati del messaggio.

Un esempio di questo potrebbe essere:

  1. Il client invia un messaggio che avvia un nuovo flusso di lavoro utilizzando l'ID ordine 7 e riceve indietro la versione 3.L'applicazione client utilizza l'URL httl://localhost/MyWorkflow.xaml e il servizio di routing inoltra a httl://localhost/MyWorkflow.v3.xamlx che è l'ultima versione.
  2. Il messaggio successivo che invia al flusso di lavoro contiene sia orderid che versione 3.L'applicazione client utilizza l'URL httl://localhost/MyWorkflow.xaml e il servizio di routing inoltra a httl://localhost/MyWorkflow.v3.xamlx che è la versione indicata.
  3. L'app client desidera inviare un messaggio a un flusso di lavoro precedente.Utilizza orderid 2 e versione 1 (risposta all'avvio di questo flusso di lavoro).L'applicazione client utilizza l'URL httl://localhost/MyWorkflow.xaml e il servizio di routing inoltra a httl://localhost/MyWorkflow.v1.xamlx che è la versione indicata.

Controllo questi screencast per ulteriori informazioni sul servizio di routing WCF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top