von Manfred,
8. Juli 2010 22:12
In der aktuellen Ausgabe 8.2010 des dotnet-Magazins beschreibe ich im Artikel Workflow Foundation 4 Was ist neu? in kompakter Form, einige Neuerungen der Workflow Foundation 4. Im darauf folgenden Artikel in der nächsten Ausgabe widtme ich mich dann den Möglichkeiten, eigene Aktivitäten zu implementieren.Mehr Infos sowie die Quellcode-Beispiele dazu finden sich unter [1].[1] http://it-republik.de/dotnet/dotnet-mag ... 00404.html
von Manfred,
18. Mai 2010 14:26
Meine Folien sowie mein Fallbeispiel zum Thema SOA mit .Net von der BASTA! on tour (München, Mai 2010) sind nun online.
von Manfred,
25. April 2010 19:43
Ich hab' zu Demo-Zwecken ein Beispiel erstellt, welches viele Aspekte der Implementierung von Workflow-Aktivitäten für WF 4 durch Ableiten von NativeActivity aufzeigt. Ich nenne diese Aktivität CountingWhile, weil sie eine While-Schleife darstellt, welche einen Zähler hochzählt (der aber nichts mit der Bedingung der Schleife zu tun hat).
Im Konstruktor wird der Body (= die Sub-Aktivität) instanziert. Im Zuge dessen wird definiert, dass der int , der an die Sub-Aktivität weitergereicht wird, über den Variablennamen PassedIndex angesprochen werden kann. In CacheMetadata werden die einzelnen Variablen, Argumente und Subaktivitäten bei der Workflow-Runtime registriert (für Argumente werden Instanzen von RuntimeArgument registriert und mit den Argumenten via Bind verbunden). Über Execute erfolgen einige verschachtelte asynchrone Aufrufe. Das folgende Listing beinhaltet den gesamten Quellcode. Das zweite Listing beinhaltet den Kern des dazugehörigen ActivityDesigners, auf den in der ersten Zeile im ersten Listing verwiesen wird.
Es wird in ein paar Wochen von mir eine Einführung über WF 4 im .Net-Magazin geben, wo ich diese Dinge und weitere etwas ausführlicher erklären werde.
[Designer(typeof(CountingWhileDesigner))]public class CountingWhile : NativeActivity { [Browsable(false)] public ActivityAction<int> Body { get; set; } public Activity<bool> Condition { get; set; } private Variable<int> CurrentIndex = new Variable<int>("CurrentIndex");
public InArgument<int> StartIndex { get; set; } public OutArgument<int> Index { get; set; } public CountingWhile() { this.Body = new ActivityAction<int> { Argument = new DelegateInArgument<int> { Name="PassedIndex" } }; }
protected override void CacheMetadata(NativeActivityMetadata metadata) { metadata.AddImplementationVariable(CurrentIndex);
RuntimeArgument arg = new RuntimeArgument("StartIndex", typeof(int), ArgumentDirection.In); metadata.Bind(StartIndex, arg); metadata.AddArgument(arg);
RuntimeArgument argOut = new RuntimeArgument("Index", typeof(int), ArgumentDirection.Out); metadata.Bind(Index, argOut); metadata.AddArgument(argOut);
metadata.AddDelegate(Body); metadata.AddChild(Condition); }
protected override void Execute(NativeActivityContext context) { int start = StartIndex.Get(context); CurrentIndex.Set(context, start);
BeginIteration(context); }
private void BeginIteration(NativeActivityContext context) { int current = CurrentIndex.Get(context);
Index.Set(context, current);
context.ScheduleActivity<bool>( Condition, OnChecked, OnFault); } private void OnChecked(NativeActivityContext context, ActivityInstance instance, bool result) { if (result ) { int current = CurrentIndex.Get(context);
context.ScheduleAction<int>( Body, current, OnBodyComplete, OnFault); } }
private void OnBodyComplete(NativeActivityContext context, ActivityInstance instance) { CurrentIndex.Set(context, CurrentIndex.Get(context) + 1); BeginIteration(context); }
private void OnFault(NativeActivityFaultContext context, Exception ex, ActivityInstance instance) { CurrentIndex.Set(context, CurrentIndex.Get(context) + 1); //context.HandleFault(); }}
<sap:ActivityDesigner x:Class="ActivityDesignerLibrary.CountingWhileDesigner" [...]> <sap:WorkflowItemPresenter MinHeight="50" Item="{Binding Path=ModelItem.Body.Handler, Mode=TwoWay}" HintText="Add body here" />
</sap:ActivityDesigner>
von Manfred,
8. November 2009 18:11
SOA mit .Net 4 wird 2010 eines meiner Themen sein. Im kommenden April wird es dazu bei der Entwickler Akademie in Frankfurt ein 4 Tage langes Bootcamp von mir geben. Dabei werde ich - passend zu meinem Buch über .Net 4 bei Microsoft Press - zeigen, wie man mit den .Net 4 Technologien WCF 4, WF 4 und EF "4" serviceorientierte Architekturen entwickeln kann. Dabei möchte ich die technische Sichtweise auf SOA mit der wirtschaftlichen Sichtweise auf SOA und benachbarte Gebiete, wie Business Process Management und BPMN, kombinieren. Weitere Infos dazu gibt es auf den Seiten der Entwickler Akademie.