Este artículo le presentará las aplicaciones relacionadas de Windows Workflow 4.0 en Visual Studio 2010. Espero que este breve artículo pueda ayudarle a desarrollar Workflow 4.0.
Visual Studio 2010 instalado recientemente en una máquina virtual. La interfaz es WPF y el uso de CPU y memoria no es exagerado. Cuando abre un proyecto de laboratorio adjunto muy simple, el uso de CPU es generalmente inferior al 20% y el uso de memoria es inferior a 800 M.
Más cerca de casa, presentemos Windows Workflow 4.0.
El modelo de flujo de trabajo ha cambiado mucho en comparación con la versión 3.5.
Sabemos que los flujos de trabajo en 3.5 están alojados en WorkflowRuntime y las instancias de flujo de trabajo se crean y ejecutan a través de WorkflowRuntime. No existe una clase WorkflowRuntime en 4.0, por lo que puede crear fácilmente instancias de WorkflowInstance y ejecutar flujos de trabajo directamente. El código en Lab es el siguiente:
WorkflowInstance miInstancia = nueva WorkflowInstance(nueva SayHello(),
nuevo SayHelloInArgs(nombre de usuario));
myInstance.OnCompleted = delegado (WorkflowCompletedEventArgs e)
{
Console.WriteLine("*** El delegado OnCompleted se está ejecutando en el hilo {0} ***",
Thread.CurrentThread.ManagedThreadId);
SayHelloOutArgs outArgs = new SayHelloOutArgs(e.Outputs);
saludo = outArgs.Saludo;
sincronizaciónEvent.Set();
};
myInstance.OnUnhandledException = delegado (WorkflowUnhandledExceptionEventArgs e)
{
Console.WriteLine(e.UnhandledException.ToString());
devolver UnhandledExceptionAction.Terminate;
};
myInstance.OnAborted = delegado (WorkflowAbortedEventArgs e)
{
Console.WriteLine(e.Reason);
sincronizaciónEvent.Set();
};
miInstancia.Run();
Hay una clase WorkflowInvoker en 4.0. Esta clase también puede ejecutar flujos de trabajo, pero esta clase se usa para probar flujos de trabajo. Esto mejora en gran medida la dificultad de probar flujos de trabajo en la versión anterior.
[Método de prueba]
vacío público debería regresar saludo con nombre ()
{
Diccionario<cadena, objeto> entrada = nuevo diccionario
<cadena, objeto>()
{
{"Nombre de usuario", "Prueba"}
};
Salida IDictionary<cadena, objeto>;
salida = WorkflowInvoker.Invoke(nuevo SayHello(), entrada);
Assert.AreEqual("Hola, Prueba del flujo de trabajo 4", salida["Saludo"]);
}
La actividad en 3.5 es la clase base de todas las actividades. Para implementar actividades personalizadas, solo necesita anular el método Execute() de Actividad en 4.0, todas las actividades se derivan de la clase abstracta WorkflowElement y se personalizan de forma predeterminada en Visual Studio. Las actividades se heredan de CodeActivity o CodeActivity<T>. De manera similar, el método Execute() también debe reescribirse para implementar una lógica de ejecución personalizada.
clase pública MyActivity1: CodeActivity
{
anulación protegida ejecución nula (contexto CodeActivityContext)
{
//tu código de implementación
}
}
Por supuesto, todavía puedes derivar actividades personalizadas de Actividad, pero es muy diferente de 3.5.
clase pública SayHelloInCode: Actividad
{
anulación protegida WorkflowElement CreateBody()
{
devolver nueva secuencia()
{
Actividades =
{
nuevaLínea de escritura()
{
Texto = "Hola flujo de trabajo 4 en código"
}
}
};
}
}
La función de servicio de flujo de trabajo recién agregada en 4.0 puede publicar directamente el flujo de trabajo como un servicio WCF. Por supuesto, el flujo de trabajo también debe diseñarse con la función de respuesta WCF. 4.0 proporciona cuatro actividades relacionadas con WCF: recibir, recibir respuesta, enviar y enviar respuesta. A través de estas actividades, las operaciones del servicio WCF se pueden definir visualmente.
El modelo básico del diseñador de flujo de trabajo se implementa en 4.0 y los diseñadores personalizados se pueden implementar fácilmente.