Windows Workflow Foundation

Slides:



Advertisements
Podobne prezentacje
20041 Projektowanie dynamicznych witryn internetowych Paweł Górczyński ASP 3.0.
Advertisements

Mechanizmy pracy równoległej
Architektura SAP R/3 Wybrane zagadnienia.
Decyzje projektowe w .NET Framework
SMARTEAM Opracował: Dr inż. Jacek Habel.
Wprowadzenie do C++ Zajęcia 2.
Tworzenie portali z wykorzystaniem technologii Sun Java Enterprise Systems Joanna Kosińska
SQL Server Native XML Web Services
PROGRAMOWANIE STRUKTURALNE
CORBA Łukasz Wnęk.
Wydajne aplikacje na platformie .NET
ADAM Active Directory w trybie aplikacyjnym
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
18/11/ Języki programowania 1 Piotr Górczyński Łączenie z bazą danych.
.NET - możliwości Jarosław Balcer & Jan Góralski.
Internet Communication Engine
Platforma .Net i Vs.Net.
Tworzenie ASP.NET Web Form
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Systemy operacyjne.
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
ASP.NET i platforma.NET Technologie internetowe ( ) Tomasz Popów
P I OTR SKOŁYSZ. POCHODZENIE I CELE CZYM JEST.NET ? CO IMPLEMENTUJE MONO ? ŚRODOWISKO PRACY [MONODEVELOP] SYTEMY OPERACYJNE CO PROGRAMOWAĆ ? JĘZYKI PRZYKŁADOWY.
Enteprise Java Beans Emil Wcisło.
Wzorce projektowe w J2EE
Systemy zarządzania treścią CMS
Architektura SOA.
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
Tworzenie aplikacji wykorzystujących Workflow Foundation oraz Windows Presentation Foundation Prezentacja będzie miała na celu pokazanie praktycznych aspektów.
.NET gdzie szukać? .NET co warto wiedzieć?
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Rozwój aplikacji przy wykorzystaniu ASP.NET
Integracja aplikacji Wykład 2
Web Serwisy w praktyce Technologie internetowe ( )
Stanisław Jerzy Niepostyn, Ilona Bluemke Instytut Informatyki,
Wirtualna baza SQL zgodna z SQL Server SQL as a Service
Podstawy programowania II
Opracował : Przemysław Drzymała
CDN OPT!MA integracja z Systemem Microsoft Office 2003.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
C# Platforma .NET CZ.3 Kuba Ostrowski.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Programowanie obiektowe 2013/2014
Aplikacje TCP i UDP. Łukasz Zieliński
Service Oriented Architecture
Programowanie strukturalne i obiektowe C++
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Podstawy języka skryptów
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Piotr Czapiewski Wydział Informatyki ZUT. Web Services Description Language.
XML w serwisach webowych. Zapotrzebowanie na serwisy XML.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Obiekty COM Przemysław Buczkowski. Plan prezentacji 1.Wprowadzenie do COM 2.Historia standardu 3.Jak działa COM 4.Interface IUknown 5.Paradygmaty COM.
Platforma .Net.
Systemy zarządzania przepływem pracy i systemy zarządzania procesami biznesowymi Karolina Muszyńska.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
 Podstawowy składnik.NET Framework  Technologia tworzenia w pełni dynamicznych stron internetowych działających po stronie serwera  Zorientowanie na.
Windows Workflow Foundation. WF został wydany wraz z NET Framework 3.0 w 2006 r., a następnie zaktualizowany w NET Framework 3.5. Te dwie pierwsze wersje.
Notacja biznesowa BPMN Piotr Kasprzyk.
Programowanie Obiektowe – Wykład 6
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Typy wyliczeniowe, kolekcje
Programowanie Obiektowe – Wykład 2
Windows Workflow Foundation
Aplikacje i usługi internetowe
Podstawy programowania
Zapis prezentacji:

Windows Workflow Foundation Procesy biznesowe Windows Workflow Foundation

Proces Biznesowy PB jest zbiorem jednej lub wielu powiązanych ze sobą procedur lub aktywności, których wykonanie prowadzi do osiągnięcia celu biznesowego. PB jest inicjowany przez pewne zdarzenie biznesowe. W czasie wykonywania PB wykorzystywane są zasoby organizacji oraz dostarczane są produkty (wyniki biznesowe) do wszystkich zainteresowanych stron (pracownicy, klienci, dostawcy, właściciele organizacji, itd.). PB posiada mierniki efektywności, dzięki czemu proces można oceniać, porównywać z innymi procesami i w dalszej konsekwencji ulepszać.

Zgłoszenie zapotrzebowania Pojęcia Dostępne zasoby Brak wolnych zasobów Zgłoszenie zapotrzebowania Rezerwacja zasobów Zamówienie zasobów Pobranie zasobów Model vs. instancja Aktywność Środowisko uruchomieniowe

Business Process Execution Language for Web Services Język opisu opracowany przez BEA Systems, IBM, Microsoft, SAP AG, Siebel Syst Wspiera wykorzystywanie usług sieciowych kontrolując ich wywoływanie i koordynację Jest interpretowany i wykonywany przez silnik (ang. Workflow Engine) Wspiera wykonywanie długich transakcji (dni, tygodnie, miesiące) Zapewnia obsługę wyjątków pojawiających się w takcie wykonywania procesu

Business Process Execution Language for Web Services Język BPEL4WS jest oparty na XML Do korzystania z BPEL4WS stworzono narzędzia graficzne. Podstawowe elementy, które wykorzystuje się podczas modelowania to: Punkty graniczne procesu (inaczej porty) – miejsca, w których proces biznesowy styka się z systemami za pośrednictwem wywoływanych usług sieciowych Wiadomości – informacje przesyłane pomiędzy poszczególnymi portami Aktywności – elementy, które mają wpływ na sposób przepływu wiadomości pomiędzy portami.

Business Process Modelling Notation Standard stworzony przez Business Process Management Initiative - BPMI, obecnie rozwijany przez Object Managament Group Notacja, która byłaby zrozumiała dla wszystkich użytkowników: od analityków biznesowych, poprzez programistów, aż po osoby odpowiedzialne za monitorowanie procesów Prezentacja modelu (np. BPEL4WS) użytkownikom biznesowym. Etap pośredni pomiędzy modelowaniem i implementacją. Graficzne narzędzia dostępne wraz z WF przedstawiają procesy biznesowe w odmienny sposób, zapewniając większą ilość szczegółowych informacji dla programisty.

Microsoft BizTalk Server integracja aplikacji w ramach organizacji – EAI (ang. Enterprise Application Integration) integracja aplikacji między różnymi organizacjami – B2B (ang. Business to Business) Wykorzystanie specjalizowanego serwera uruchamieniowego dla procesów biznesowych pozwala tworzyć skalowalne i odporne na awarie rozwiązania. Wszystkie moduły wchodzące w skład produktu mogą być uruchamiane na wielu fizycznych maszynach realizujących ten sam, logiczny proces biznesowy.

Microsoft BizTalk Server Orchestration Designer BizTalk Schema Editor BizTalk Mapper Adapter Framework oraz zestaw gotowych adapterów Środowisko uruchomieniowe

Orchestration Designer Graficzne modelowanie PB Dostępny jako plugin do MSVisio lub uruchamianiy z VS Stała grupa aktywności m.in.: przygotowanie komunikatu (construct message) przypisanie komunikatu (message assignment) transformacja komunikatu (transform). Model procesu może obejmować również elementy odpowiedzialne za monitorowanie zdarzeń ważnych z punktu widzenia biznesu

Orchestration Designer

BizTalk Schema Editor Tworzenie schematów XML (XSD) definiujących komunikaty przetwarzane przez orkiestrację Na tej podstawie komunikat może być stworzony np. poprzez aktywność przypisania komunikatu.

BizTalk Schema Editor

BizTalk Mapper definiowania mapowania wykorzystywanego przez aktywność transformacji Aktywność transformacji zmienia komunikat na inny (dokument XML -> dokument XML) Na tej podstawie komunikat może być stworzony np. poprzez aktywność przypisania komunikatu.

BizTalk Mapper

Integracja Biztalka Komunikacja pomiędzy różnymi systemami za odbywa się za pomocą różnych protokołów komunikacyjnych Porty używane w orkiestracjach wykorzystują elementy zwane adapterami Adaptery: predefiniowane (m.in. Adapter Web Services, Adapter plików, Adapter HTTP/SMTP/POP3, Adapter SQL ) dedykowane do konkretnych aplikacji (m.in. Adapter WebSphere MQ lub Adapter Windows SharePoint Services) dostarczone przez fimy zewnętrzne stworzone z wykorzystaniem Adapter Framework

Środowisko uruchomieniowe Elementy wchodzące w skład orkiestracji są kompilowane do postaci bibliotek DLL. Procesy przed uruchomieniem należy umieścić (ang. deploy) na serwerze BizTalk Server oraz połączyć z odpowiednimi portami. Porty są tworzone na serwerze (np. np. BizTalk Administration Console) jako oddzielne elementy - niezależność procesu biznesowego od zewnętrznych systemów.

Business Rules Engine Definiowanie i obliczanie reguł logicznych wykorzystywanych do odpowiedniego przetwarzania procesów biznesowych. Przydatny zwłaszcza, gdy podczas implementowania procesu należy brać pod uwagę dużą ilość parametrów mających wpływ na przebieg procesu. Możliwość modyfikacji reguł bez konieczności zmieniania orkiestracji, (tj. bez zmiany modelu, rekompilacji oraz wdrażania). Do modyfikacji reguł można używać narzędzia Business Rule Composer.

BizTalk Administration Console Podstawowe narzędzie służące do zarządzania silnikiem BizTalk Server. Informacje przydatne do monitorowania działania wszystkich składników serwera. Konfiguracja i wdrażanie wszystkich elementów (tj. m.in. procesy biznesowe, porty, powiązania pomiędzy portami i orkiestracjami oraz wymagane biblioteki DLL), np.: ustawianie adresu URL dla portu wykorzystującego adapter HTTP - Logika działania procesu jest niezależna od środowiska wykonywania.

Business Activity Monitoring Śledzenie informacji ważnych z punktu widzenia użytkowników biznesowych. Orkiestracje muszą udostępniać odpowiednie dane i zdarzenia (musi to być uwzględnione na etapie implementacji procesu). Odpowiednio przygotowana orkiestracja w trakcie wykonywania, zapisuje dane w bazie danych (ang. tracking database), Businnes Activity Monitoring może być wykorzystany do monitorowania zdarzeń nie tylko orkiestracji ale także dowolnych aplikacji stworzonych w oparciu o platformę .NET.

IBM WebSphere WebSphere Business Modeler: graficzny edytor umożliwiający modelowanie PB możliwość przeprowadzenia symulacji stworzonego PB i jego analizy za pomocą stworzonych wskaźników biznesowych. WebSphere Integration Developer implementacja modelu PB. wykorzystanie wizualnych elementów, odpowiadających elementom znanym z języka BPEL możliwość zaimplementowania maszyny stanów (ang. state machine). WebSphere Process Server serwer aplikacji oraz silnik odpowiedzialny za uruchamianie procesów biznesowych oparty o Enterprise Service Bus wspiera dynamiczne modyfikowanie reguł biznesowych wykorzystywanych przez procesy. WebSphere Business Monitor

Inne rozwiazania Jboss i Flux Oracle: workflow package, WF_Engine wraz z Java API

Dziedziny zastosowań Szybka zmiennosc wymagań (np. plany taryfowe oeratorów t. Komórkowych) Duże zindywidualizowanie wymagań – planowanie obsługi klientów, sposobów przetwarzania danych itd. Powtarzalność definicji

.NET Framework 3.x .NET Framework 4.x Workflow Foundation – pierwsze wydanie .NET Framework 4.x Workflow Foundation – zupełnie zmieniona implementacja

Windows Workflow Foundation Rodzaje przepływów Proces sekwencyjny Proces stanowy Aktywności Środowisko uruchomieniowe

Proces sekwencyjny Proces sekwencyjny składa się z punktu wejscia, punktu wyjścia oraz kolejnych aktywności wykonywanych jedna po drugiej. Klasa definiująca ten typ procesu dziedziczy po klasie SequentialWorkflowActivity. Na przebieg wykonania procesu mają wpływ aktywności zmieniające przepływ procesu. Przebieg procesu może zostać zmieniony w wyniku wystąpienia wyjątków, które mogą być przechwytywane na poziomie pojedynczej aktywności lub całego procesu.

Proces sekwencyjny Przykład

Aktywności kontrolujące przepływ IfElseActivity IfElseBranchActivity

Aktywności kontrolujące przepływ WhileActivity

Aktywności kontrolujące przepływ SequenceActivity ParallelActivity

Proces stanowy Zaniechany w WF 4.0/ ponownie udostepniony w WF 4.5 Proces stanowy jest procesem, który można porównać do skończonej maszyny stanowej. Składa się z specjalnych aktywności typu StateActivity, które reprezentują stan procesu połączeń określających możliwe przejścia między stanami. Spośród aktywności odpowiadających stanom można wyróżnić aktywność początkową oraz opcjonalną aktywność, która symbolizuje zakończenie procesu. Proces stanowy jest realizowany jako klasa dziedzicząca po StateMachineWorkflowActivity.

Proces stanowy. Przykład

Środowisko uruchomieniowe Aplikacja Środowisko uruchomieniowe Usługi Instancja procesu

WF4.0 Wszystko jest aktywnością CodeActivity Workflow jest również aktywnością AsyncCodeActivity Activity NativeActivity DynamicActivity

Dynamiczne aktywności WF4.0 Foo.dll Compile via XAML Build Task <Activity x:Class=“Foo" > <x:Members> <x:Property Name="argument1“ Type="InArgument(x:String)" /> <x:Property Name="argument2” </x:Members> C# (DynamicActivity) Activity x = ActivityXamlServices.Load(xamlFile); WorkflowInvoker.Invoke(x, new Dictionary … ); Execute with DynamicActivity

WorkflowInvoker.Invoke(new foo) WorkflowInvoker WF4.0 Foo WorkflowInvoker.Invoke(new foo)

WorkflowApplication WF 4.0 Foo Foo Foo wa.Cancel() wa.ResumeBookmark() wa.Unload() wa.Persist() wa.Run() var wa = new WorkflowApplication(new Foo)

Otoczenie procesu WF4.0 WorkflowServiceHost Foo Foo Foo

WF Persistence WF 4.0 Host WorkflowApplication wa.Persist() Idle

Workflow Events Workflow Runtime Scheduler Tooling Monitoring Data raises events Tracking Provider Tracking Profile add Monitoring Data notify Tracking Participant Application Host

Tworzenie WF WF jest aktywnością może być napisany w postaci kodu lub zdefiniowany w XAML – lub dowolnym innym formacie (np w jęz. dynamicznym) Aktywność może zawierać inne aktywności Aktywność może mieć argumenty we i wy (jak również zmienne) Aktywności zwracajace warość mają oddzielne klasy bazowe n.p. CodeActivity<TResult>, NativeActivity<TResult> WF jest definicją, wg której można utworzyć wiele instancji Każda instancja ma indywidualne środowisko (zmienne, argumenty) InArgument

Wykonanie WF runtime „widzi” aktywności, aktywności, aktywności (nie Sequence, Parallel, Recurrence) WF runtime jest „sędzią” pilnuje reguł CacheMetadata sposób auto-opisu aktywności WF runtime „wie” o zakończeniu aktywności Aktywność może zlecić wykonanie aktywności potomnej (i. ew. poczekać na jej zakończenie) Mozliwych jest wiele różnych działań (“pulses of work”) dla jednej aktywności Możliwe jest wyrażenie dowolnych, złożonych rodzajów przepływów (control flow) Możliwe jest wiele scieżek wykonania…

Some work items are added to the front of the list, others to the back Scheduler External Code Work items are executed one at a time within a single workflow instance Activity Code ADD PUSH ENQUEUE WF Runtime while !EmptyList Execute(next WorkItem) while !EmptyList Execute(next WorkItem) DoBookkeeping() while !EmptyList Execute(next WorkItem) DoBookkeeping() Some work items are added to the front of the list, others to the back POP WorkItem 1 WorkItem 2 WorkItem 3 WorkItem 4

[ scheduler example ] Workflow Instance Complete! PARALLEL SEQUENCE1 “1” “3” “2” “4” ■ Sequence2.Continue Write(“3”).Execute Write(“4”).Execute Parallel.Continue Sequence2.Execute Sequence2.Continue Sequence1.Continue Sequence1.Execute Parallel.Execute Write(“1”).Execute Write(“2”).Execute Parallel.Continue Sequence1.Continue Workflow Instance Complete! Sequence2.Execute

Scheduler Jedna instancja Scheduler-a na proces Zarządza uporządkowana listą zadań jednostkowych Zadania mogą być dodwane przez aktywności ale również przez hosta lub zewnętrzny kod Niektóre zdania sa dodawane na poczatek inne na koniec kolejki Wykonywane jest jedno zadnie na raz Zadania nie sa przerywane Pomiędzy zadaniami mogą być realizowane różne operacje np. tracking, persistence

Threading Model Dla pojedynczej instancji programu jest wykorzystywany jeden wątek na raz Upraszcza model programowania aktywności Do poszczegolnych zadań mogą zostać przypisane rózne wątki (jeden na raz)w ramach tej samej instancji WF runtime korzysta z dostarczonego przez hosta SynchronizationContext System.Threading.SynchronizationContext Można wykorzystać dla utworzenia własnych mechanizmów zarzadzania wątkami Nie mozna wykorzystać TLS dla WF WF Execution Properties – nazwane własciwośc i widoczne dla poddrzewa WF WF runetime odpowiada za dołączanie / odłaczanie środowiska brzed/po wykonaniu zadania Aktywności nie powinny blokować wątku WF programs coordinate work

Asynchroniczne Aktywności WF Runtime Async Activity I/O code BeginExecute BeginWrite WorkItem WorkItem WorkItem WorkItem AsyncWorkCompletionCallback EndExecute EndWrite WorkItem

Parallel + asynchroniczne a. = równoległość Parallel p = new Parallel { Branches = new WriteToFile { FileName = "a", Bytes = … }, new WriteToFile { FileName = "b", Bytes = … } } }; WorkflowInvoker.Invoke(p);

Bookmarks Co się dzieje gdy program musi czekać (i czekac i czekać) na wejście? Być może czeka również 1000 innych instancji Potrzebny nieobciążajacy systemu WaitForInput() Zakładka! Nazwany punkt wznowienia w WF Wznowienie wskazuje metodę zwrotną aktywności WF runtime zarządza wznowieniem – instancja nie musi być w pamięci Gotowa do użycia aktywność WCF Receive

“Please deliver [data] to instance [id] at bookmark [name]” Bookmark Resumption “Please deliver [data] to instance [id] at bookmark [name]” External Code Activity Code RESUME WF Runtime CREATE ENQUEUE Work item 1 “pizza” Work item 2 Work item 3 Work item 4

Persystencja Persystencja pozwala wstrzymywać instancję WF, zapisać ją „gdzieś” i wznowić później Zachowana instancja nie jest związana z konkretnym WF hostem, komputerem, CLR, wątkiem czy procesem Zalety skalowalność, odporność na upadki Instancje WF są serializowalne Stos CLR nie jest serializowalny, ale instancja WF ma stos tylko w trakcie wykonania pojedynczego zadania Czasem nie chcemy możliwości persystencji - “no persist zone” Automatyczne założenie podczas asynchronicznych aktywności Szczegóły implementacji persystencji są niezależne od silnika WF

Co jest w utrwalonej instancji Zserializowana instancja zawiera: Listę zadań (pustą jeśli instyancja jest wolna) Bookmark-i Dane (argumenty and zmienne) Środowisko dla wszystkich aktualnie wykonywanych aktywności Informacje o instancji (callbacks, execution props) Dodatkowe dane od uczestników procesu persystencji Nie zawiera definicji WF Milion instancji może współdzielic tą samą definicję Zarządzanie definicjami leży w gestii hosta

[ Przykład: zserializowana instancja WF ] PARALLEL private int index private int index string s DateTime d int n ■

[ Przykład: zserializowana instancja WF ] PARALLEL private int index private int index 3 string s DateTime d int n “hello” INPUT Bookmark:“x” ■

Aktywności kontrolujące przepływ Definiują sposób wykonania dla złożonych aktywności Dowolna aktywność może być rdzeniem Aktywności można zagłębiać Parallel Activity 4 Activity 1 Activity 2 Activity 3 Activity 1 Activity 2 Activity 3 A B C D Delay (TimeOut) Approve Action A Reject Action B PickBranch Action C

Przegląd aktywności Assign Compensate Persist ReceiveMessage SendMessage Throw TryCatch Flowchart DoWhile While ForEach If Pick Switch Sequence Parallel Assign: assigns a value to a variable in the workflow. Compensate: provides a way to do compensation, such as handling a problem that occurs in a long-running transaction. DoWhile: executes an activity, then checks a condition. The activity will be executed over and over as long as the condition is true. Flowchart: groups together a set of activities that are executed sequentially, but also allows control to return to an earlier step. ForEach: executes an activity for each object in a collection. If: creates a branch of execution. Parallel: runs multiple activities at the same time. Persist: explicitly requests the WF runtime to persist the workflow. Pick: allows waiting for a set of events, then executing only the activity associated with the first event to occur. ReceiveMessage: receives a message via WCF. SendMessage: sends a message via WCF. Sequence: groups together a set of activities that are executed sequentially. Along with acting as a workflow’s outermost activity, Sequence is also useful inside workflows. For example, a While activity can contain only one other activity. If that activity is Sequence, a developer can execute an arbitrary number of activities within the while loop. Switch: provides a multi-way branch of execution. Throw: raises an exception. TryCatch: allows creating a try/catch block to handle exceptions. While: executes a single activity as long as a condition as true.

Przepływ sekwencyjn

Przepływ typu Workflow

Rrozszerzanie WF Tworzy mechanizm pozwalający wstrzykiwać zewnętrzną logike w predefiniowane miejsca głównego WF WF są rozszerzane w naturalny sposób przez kolejne WF Approval Payment Process Order Receive Order Reserve Inventory Ship Order

Tworzenie i uruchamianie WF Tworzenie WF: new MyVeryImportantWorkflow() ActivityXamlServices.Load(“MyVeryImportantWorkflow.xaml") Uruchamianie WF: WorkflowInvoker.Invoke(wf); WorkflowApplication app = new WorkflowApplication(a); app.Run();

Hierarchia aktywności WF Activity AsyncCode Activity Code Activity Activity <TResult> Native Activity AsyncCode Activity <TResult> Code Activity <TResult> Native Activity <Tresult>

Aktywność WF Należy przeciążyć Execute public class SayHelloInCode : CodeActivity { protected override void Execute(CodeActivityContext context) Console.WriteLine("Hello Workflow 4 in code"); } Należy przeciążyć Execute

Asynchroniczna Aktywność WF public class SayHelloInAsyncWay : AsyncCodeActivity { protected override IAsyncResult BeginExecute( AsyncCodeActivityContext context, AsyncCallback callback, object state) { ... return stream.BeginWrite(bytes,0,bytes.Length,callback,state); } protected override void EndExecute(AsyncCodeActivityContext context, IAsyncResult result) { ... FileStream stream = (FileStream)context.UserState; stream.EndWrite(result); } Należy przeciążyć BeginExecute i EndExecute

Zakładki WF Bookmark wskazuje na f. aktywności public class ReadLine : NativeActivity<string> { protected override void Execute(NativeActivityContext context) context.CreateBookmark("ReadLine", new BookmarkCallback(BookmarkResumed)); } private void BookmarkResumed(NativeActivityContext context, Bookmark bk, object state) Result.Set(context, state); Bookmark wskazuje na f. aktywności

Aktywacja zakładki WorkflowApplication app = new WorkflowApplication(MyWorkflow); app.Run(); app.ResumeBookmark(" ReadLine", "... something ...");

Hostowanie WF Dedykowany proces Workflow services Windows Application Server (codename „Dublin”) + IIS

WorkflowService

Windows Application Service

ASP.NET vs WorkflowService

ASP.NET vs WorkflowServices / Dublin

WF Service – data kontrakt [DataContract] public class ExpenseReport { [DataMember] public DateTime FirstDateOfTravel { get; set; } public double TotalAmount { get; set; } public string EmployeeName { get; set; } }

WF Service - Konfiguracja aktyw.

WF Service - podgląd serwisu

WF Service - host WorkflowServiceHost host = new WorkflowServiceHost( XamlServices.Load("ExpenseReportService.xamlx"), new Uri("http://localhost:9897/Services/Expense") ); host.AddDefaultEndpoints(); host.Description.Behaviors.Add( new ServiceMetadataBehavior { HttpGetEnabled = true }); //dodatkowy end point WorkflowControlEndpoint wce = new WorkflowControlEndpoint( new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/Expense/WCE")); host.Open(); Console.WriteLine("Host is open"); Console.ReadLine();

Persystencja - baza Przygotowanie bazy %windir%\Microsoft.NET\Framework\v4.0.21006\sql\<language> SqlWorkflowInstanceStoreSchema.sql SqlWorkflowInstanceStoreLogic.sql

Persystencja – konfiguracja providera WorkflowApplication application = new WorkflowApplication(activity); InstanceStore instanceStore = new SqlWorkflowInstanceStore( @"Data Source=.\SQLEXPRESS;Integrated Security=True"); InstanceView view = instanceStore.Execute( instanceStore.CreateInstanceHandle(), new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); instanceStore.DefaultInstanceOwner = view.InstanceOwner; application.InstanceStore = instanceStore;

Persystencja Konfiguracja providera Wymuszanie utrwalania workflow-u WorkflowApplication application = new WorkflowApplication(activity); InstanceStore instanceStore = new SqlWorkflowInstanceStore( @"Data Source=.\SQLEXPRESS;Integrated Security=True"); InstanceView view = instanceStore.Execute( instanceStore.CreateInstanceHandle(), new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30)); instanceStore.DefaultInstanceOwner = view.InstanceOwner; application.InstanceStore = instanceStore; Wymuszanie utrwalania workflow-u wf.PersistableIdle = (waie) => PersistableIdleAction.Persist

WF Tracking Po zakończeniu WF jest likwidowany – oczywiscie można zareagować na odpowiednie zdarzenie ... Tracking: TrackingParticipant (standardowo dostępny EtwTrackingParticipant ETW = Enterprise Trace for Windows )) TrackingProfile

Tracking profile ActivityStateQuery WorkflowInstanceQuery CustomTrackingQuery TrackingProfile profile = new TrackingProfile { Name = "SimpleProfile", Queries = { new WorkflowInstanceQuery { States = { "*" } }, new ActivityStateQuery { ActivityName = "WriteLine", States={ "*" }, Variables = {"Text" } } }; ActivityStateQuery – used to identify activity states (e.g. closed) and variables or arguments to extract data WorkflowInstanceQuery – used to identify workflow events CustomTrackingQuery – used to identify explicit calls to track data, usually within custom activities

Activity Designer Kontrolki WPF: ActivityDesigner WorkflowItemPresenter WorkflowItemsPresenter ExpressionTextBox ActivityDesigner – root WPF control used in activity designers WorkflowItemPresenter – used to display a single Activity WorkflowItemsPresenter – used to display a collection of child Activities ExpressionTextBox – used to enable in place editing of expressions such as arguments

WF: Model programowy Activity wf = new Sequence { Activities = { new WriteLine { Text = "Hello" }, new WriteLine { Text = "World." } } }; WorkflowInvoker.Invoke(wf); ActivityDesigner – root WPF control used in activity designers WorkflowItemPresenter – used to display a single Activity WorkflowItemsPresenter – used to display a collection of child Activities ExpressionTextBox – used to enable in place editing of expressions such as arguments

WF: Zmienne Sequence wf = new Sequence { Variables = { new Variable<string>{ Default = "Hello", Name = "greeting"}, new Variable<string> { Default = "Bill", Name = "name" } }, Activities = { new WriteLine { Text = new VisualBasicValue<string>("greeting“) }, new WriteLine { Text = new VisualBasicValue<string>("name + \"Gates\"")} } } }; WorkflowInvoker.Invoke(wf); ActivityDesigner – root WPF control used in activity designers WorkflowItemPresenter – used to display a single Activity WorkflowItemsPresenter – used to display a collection of child Activities ExpressionTextBox – used to enable in place editing of expressions such as arguments

WF: Przekazywanie parametrów IDictionary<string, object> results = WorkflowInvoker.Invoke(wf, new Dictionary<string,object> { {"name", "Bill" } } ); string outValue = results["fullGreeting"].ToString(); ActivityDesigner – root WPF control used in activity designers WorkflowItemPresenter – used to display a single Activity WorkflowItemsPresenter – used to display a collection of child Activities ExpressionTextBox – used to enable in place editing of expressions such as arguments

WF: Przekazywanie parametrów IDictionary<string, object> results = WorkflowInvoker.Invoke(wf, new Dictionary<string,object> { {"name", "Bill" } } ); string outValue = results["fullGreeting"].ToString(); //{… // public InArgument<string> Name {get; set;} // ActivityDesigner – root WPF control used in activity designers WorkflowItemPresenter – used to display a single Activity WorkflowItemsPresenter – used to display a collection of child Activities ExpressionTextBox – used to enable in place editing of expressions such as arguments