Este artigo apresentará os aplicativos relacionados ao Windows Workflow 4.0 no Visual Studio 2010. Espero que este breve artigo possa ajudá-lo a desenvolver o Workflow 4.0.
Instalei recentemente o Visual Studio 2010 em uma máquina virtual. A interface é WPF e o uso de CPU e memória não é exagerado. Quando você abre um projeto de laboratório anexado muito simples, o uso de CPU geralmente é inferior a 20% e o uso de memória é inferior a 800M.
Mais perto de casa, vamos apresentar o Windows Workflow 4.0.
O modelo de fluxo de trabalho mudou muito em comparação com 3.5.
Sabemos que os fluxos de trabalho no 3.5 são hospedados no WorkflowRuntime e as instâncias de fluxo de trabalho são criadas e executadas por meio do WorkflowRuntime. Não há classe WorkflowRuntime no 4.0, portanto, você pode criar facilmente instâncias do WorkflowInstance e executar fluxos de trabalho diretamente. O código no Lab é o seguinte:
WorkflowInstance minhaInstance = new WorkflowInstance(new SayHello(),
new SayHelloInArgs(nomedeusuário));
myInstance.OnCompleted = delegado(WorkflowCompletedEventArgs e)
{
Console.WriteLine("*** O delegado OnCompleted está sendo executado no thread {0} ***",
Thread.CurrentThread.ManagedThreadId);
SayHelloOutArgs outArgs = new SayHelloOutArgs(e.Outputs);
saudação = outArgs.Greeting;
sincronizarEvent.Set();
};
myInstance.OnUnhandledException = delegado(WorkflowUnhandledExceptionEventArgs e)
{
Console.WriteLine(e.UnhandledException.ToString());
retornar UnhandledExceptionAction.Terminate;
};
myInstance.OnAborted = delegado(WorkflowAbortedEventArgs e)
{
Console.WriteLine(e.Motivo);
sincronizarEvent.Set();
};
minhaInstance.Run();
Existe uma classe WorkflowInvoker na versão 4.0. Essa classe também pode executar fluxos de trabalho, mas é usada para testar fluxos de trabalho. Isso melhora muito a dificuldade de testar fluxos de trabalho na versão anterior.
[MétodoTeste]
public void ShouldReturnGreetingWithName()
{
Dicionário<string, objeto> entrada = novo Dicionário
<string, objeto>()
{
{"Nome de usuário", "Teste"}
};
Saída IDictionary<string, objeto>;
saída = WorkflowInvoker.Invoke(new SayHello(), entrada);
Assert.AreEqual("Olá, teste do fluxo de trabalho 4", output["Saudação"]);
}
A atividade na versão 3.5 é a classe base de todas as atividades. Para implementar atividades personalizadas, você só precisa substituir o método Execute() da atividade na versão 4.0, todas as atividades são derivadas da classe abstrata WorkflowElement e são personalizadas por padrão no Visual Studio; . As atividades são herdadas de CodeActivity ou CodeActivity<T> Da mesma forma, o método Execute() também precisa ser reescrito para implementar a lógica de execução personalizada.
classe pública MyActivity1: CodeActivity
{
substituição protegida void Execute (contexto CodeActivityContext)
{
//seu código de implementação
}
}
Claro, você ainda pode derivar atividades personalizadas de Activity, mas é muito diferente da versão 3.5.
classe pública SayHelloInCode: Atividade
{
substituição protegida WorkflowElement CreateBody()
{
retornar nova sequência()
{
Atividades =
{
novaWriteLine()
{
Text = "Olá Workflow 4 no código"
}
}
};
}
}
A função de serviço de fluxo de trabalho recém-adicionada no 4.0 pode publicar diretamente o fluxo de trabalho como um serviço WCF. É claro que o fluxo de trabalho também deve ser projetado com a função de resposta do WCF. 4.0 fornece quatro atividades relacionadas ao WCF: Receber, ReceberReply, Enviar e EnviarReply Por meio dessas atividades, as operações de serviço do WCF podem ser definidas visualmente.
O modelo básico do designer de fluxo de trabalho é implementado na versão 4.0 e os designers personalizados podem ser facilmente implementados.