Dieser Artikel stellt Ihnen die zugehörigen Anwendungen von Windows Workflow 4.0 in Visual Studio 2010 vor. Ich hoffe, dieser kurze Artikel kann Ihnen bei der Entwicklung von Workflow 4.0 helfen.
Kürzlich habe ich Visual Studio 2010 in einer virtuellen Maschine installiert. Die Schnittstelle ist WPF, und die CPU- und Speicherauslastung ist nicht übertrieben. Wenn Sie ein sehr einfaches angehängtes Laborprojekt öffnen, beträgt die CPU-Auslastung im Allgemeinen weniger als 20 % und die Speicherauslastung beträgt weniger als 800 MB.
Lassen Sie uns näher zu Hause Windows Workflow 4.0 vorstellen.
Das Workflow-Modell hat sich im Vergleich zu 3.5 stark verändert.
Wir wissen, dass Workflows in 3.5 in WorkflowRuntime gehostet werden und Workflow-Instanzen über WorkflowRuntime erstellt und ausgeführt werden. In 4.0 gibt es keine WorkflowRuntime-Klasse, sodass Sie problemlos WorkflowInstance-Instanzen erstellen und Workflows direkt ausführen können. Der Code im Lab lautet wie folgt:
WorkflowInstance myInstance = new WorkflowInstance(new SayHello(),
new SayHelloInArgs(userName));
myInstance.OnCompleted = Delegate(WorkflowCompletedEventArgs e)
{
Console.WriteLine("*** OnCompleted-Delegat läuft auf Thread {0} ***",
Thread.CurrentThread.ManagedThreadId);
SayHelloOutArgs outArgs = new SayHelloOutArgs(e.Outputs);
Greeting = outArgs.Greeting;
syncEvent.Set();
};
myInstance.OnUnhandledException = Delegate(WorkflowUnhandledExceptionEventArgs e)
{
Console.WriteLine(e.UnhandledException.ToString());
return UnhandledExceptionAction.Terminate;
};
myInstance.OnAborted = Delegate(WorkflowAbortedEventArgs e)
{
Console.WriteLine(e.Reason);
syncEvent.Set();
};
myInstance.Run();
In 4.0 gibt es eine WorkflowInvoker-Klasse. Diese Klasse kann auch Workflows ausführen, diese Klasse wird jedoch zum Testen von Workflows verwendet. Dies verbessert die Schwierigkeit beim Testen von Workflows in der vorherigen Version.
[Testmethode]
public void ShouldReturnGreetingWithName()
{
Dictionary<string, object> input = neues Wörterbuch
<string, object>()
{
{"Benutzername", "Test"}
};
IDictionary<string, object> Ausgabe;
Ausgabe = WorkflowInvoker.Invoke(new SayHello(), input);
Assert.AreEqual("Hallo, Test aus Workflow 4", Ausgabe["Gruß"]);
}
Aktivität in 3.5 ist die Basisklasse aller Aktivitäten. Sie müssen lediglich die Execute()-Methode von Aktivität in 4.0 überschreiben. Alle Aktivitäten werden von der abstrakten Klasse WorkflowElement abgeleitet und standardmäßig in Visual Studio angepasst . Aktivitäten werden von CodeActivity oder CodeActivity<T> geerbt. Ebenso muss die Execute()-Methode neu geschrieben werden, um benutzerdefinierte Ausführungslogik zu implementieren.
öffentliche Klasse MyActivity1: CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
//Ihr Implementierungscode
}
}
Natürlich können Sie weiterhin benutzerdefinierte Aktivitäten von Activity ableiten, aber es unterscheidet sich stark von 3.5.
öffentliche Klasse SayHelloInCode: Aktivität
{
protected override WorkflowElement CreateBody()
{
neue Sequenz() zurückgeben
{
Aktivitäten =
{
newWriteLine()
{
Text = „Hallo Workflow 4 im Code“
}
}
};
}
}
Die neu hinzugefügte Workflow-Dienstfunktion in 4.0 kann den Workflow direkt als WCF-Dienst veröffentlichen. Natürlich muss der Workflow auch mit der WCF-Antwortfunktion entworfen werden. 4.0 bietet vier WCF-bezogene Aktivitäten: Empfangen, EmpfangenReply, Senden und SendReply. Durch diese Aktivitäten können WCF-Dienstvorgänge visuell definiert werden.
Das Grundmodell des Workflow-Designers ist in 4.0 implementiert, und benutzerdefinierte Designer können problemlos implementiert werden.