Pergunta

Relacionado a essa questão.

Eu entendo como implementar a versão de fluxos de trabalho usando WorkflowApplication. Se você mantiver a definição XAML original para versões mais antigas do seu fluxo de trabalho, poderá carregá -las usando o direito WorkflowApplication construtor.

Como você poderia garantir isso WorkflowServiceHost Usa a definição correta do fluxo de trabalho quando você deseja hospedar seus fluxos de trabalho no IIS?

Existe um WorkflowServiceHost Construtor que você pode usar para carregar uma definição de fluxo de trabalho, mas quando você está hospedando dentro do IIS através de um arquivo XAMLX, você não liga WorkflowServiceHost você mesmo, isso é tratado de alguma forma pelo IIS. Então, como faço para garantir que a definição correta do fluxo de trabalho seja carregada para a versão certa do meu fluxo de trabalho?

Foi útil?

Solução

A abordagem usando o WorkFlowServiceHost não é uma forma diferente usando uma aplicação de fluxo de trabalho. O básico de manter as várias versões XAML (x) ainda se aplica. Portanto, no caso do WorkFlowServiceHost, você precisa criar vários WorkFlowServiceHost, hospedando uma versão diferente do seu XAMLX. Cada um com um terminal diferente. Então, basicamente, um endpoint aborda um serviço de fluxo de trabalho e sua versão.

Então, como obter mensagens do cliente para o FlowServiceHost correto? Aqui, o serviço de roteamento da WCF é seu amigo. Em vez de fazer com que o cliente se comunique diretamente com o seu trabalho de trabalho, eles usam um serviço de roteamento intermediário do WCF. Isso, por sua vez, verifica as mensagens e as rotula para o WorkFlowServiceHost que hospeda o arquivo XAMLX apropriado. Então, como isso sabe. Existem várias maneiras de fazer isso. Por exemplo, fazendo uma pesquisa de banco de dados usando um identificador de correlação de mensagem com solicitações de novos fluxos de trabalho sempre indo para a última versão. A maneira mais fácil é fazer com que o serviço de fluxo de trabalho retorne um número de versão como parte da solicitação inicial e faça disso uma parte necessária de cada solicitação subsequente. Dessa forma, o serviço de roteamento do WCF pode fazer todos os seus trabalhos apenas com os dados da mensagem.

Um exemplo disso seria:

  1. O cliente envia uma mensagem iniciando um novo fluxo de trabalho usando o ID do pedido 7 e recebe a versão 3 de volta. O aplicativo cliente usa o URL httl: //localhost/myworkflow.xaml e o serviço de roteamento a seguir para httl: //localhost/myworkflow.v3.xamlx, que é a última versão.
  2. A próxima mensagem que envia para o fluxo de trabalho contém o OrderId e a versão 3. O aplicativo cliente usa URL httl: //localhost/myworkflow.xaml e o serviço de roteamento avançado para httl: //localhost/myworkflow.v3.xamlx, que é a versão indicada .
  3. O aplicativo cliente deseja enviar uma mensagem para um fluxo de trabalho mais antigo. Ele usa o OrderId 2 e a versão 1 (respondeu quando esse fluxo de trabalho foi iniciado). O aplicativo cliente usa o URL httl: //localhost/myworkflow.xaml e o serviço de roteamento a seguir para httl: //localhost/myworkflow.v1.xamlx, que é a versão incicada.

Verificar esses Screencasts para obter mais informações sobre o serviço de roteamento do WCF.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top