A Windows-munkafolyamat alapfunkcióinak jellemzői

A .NET Framework 4 számos funkciót ad hozzá a Windows Workflow Foundationhez. Ez a dokumentum számos új funkciót ismertet, és részletesen ismerteti azokat a forgatókönyveket, amelyekben hasznosak lehetnek.

Üzenetkezelési tevékenységek

Az üzenetkezelési tevékenységek (Receive, SendReply, Send, ReceiveReply) WCF-üzenetek küldésére és fogadására szolgálnak a munkafolyamatból. Receive és SendReply a tevékenységek a Windows Communication Foundation (WCF) szolgáltatás olyan műveletének kialakítására szolgálnak, amely A WSDL-n keresztül érhető el, csakúgy, mint a hagyományos WCF-webszolgáltatások. Send és ReceiveReply a WCF-hez ChannelFactoryhasonló webszolgáltatás használatára szolgálnak; a Workflow Foundationhez is létezik szolgáltatás-hivatkozás hozzáadása , amely előre konfigurált tevékenységeket hoz létre.

Az üzenetkezelési tevékenységek használatának első lépései

  • A Visual Studio 2012-ben hozzon létre egy WCF munkafolyamat-szolgáltatási alkalmazásprojektet. A Receive és SendReply pár kerül a vászonra.

  • Kattintson a jobb gombbal a projektre, és válassza a Szolgáltatáshivatkozás hozzáadása lehetőséget. Mutasson egy meglévő webszolgáltatás WSDL-ére, és kattintson az OK gombra. A projektet úgy készítheti el, hogy a Send és ReceiveReply segítségével megvalósított tevékenységeket megjeleníti a szerszámkészletben.

  • Munkafolyamat-szolgáltatások dokumentációja

Üzenetkezelési tevékenységek – példaforgatókönyv

Egy BestPriceFinder szolgáltatás több légitársasághoz is felhívja a hívásokat, hogy megtalálják egy adott útvonal legjobb jegyárát. Ennek a forgatókönyvnek a végrehajtásához az üzenettevékenységek használatával kell fogadnia az árkérelmet, le kell kérnie az árakat a háttérszolgáltatásokból, és a legjobb áron kell válaszolnia az árkérésre. Azt is megkövetelné, hogy más, házon kívül végzett tevékenységek használatával hozza létre az üzleti logikát a legjobb ár kiszámításához.

WorkflowServiceHost

A WorkflowServiceHost az azonnal használható munkafolyamat-gazda, amely több példányt, konfigurációt és WCF-üzenetváltást támogat (bár a munkafolyamatok esetén az üzenetküldés nem szükséges az üzemeltetéshez). Emellett a szolgáltatás viselkedési halmazán keresztül integrálható az adatmegőrzéssel, a nyomon követéssel és a példányvezérléssel is. A WCF-hez ServiceHost hasonlóan a WorkflowServiceHost lehet önállóan üzemeltetni konzol-/WinForms-/WPF-alkalmazásként vagy Windows-szolgáltatásként, illetve az IIS-ben vagy WAS-ben weben üzemeltethető (.xamlx-fájlként).

A Munkafolyamat-szolgáltatás gazdagép használatának első lépései

WorkflowServiceHost-forgatókönyv

A BestPriceFinder szolgáltatás több légitársasághoz is felhívja a hívásokat, hogy megtalálják az adott útvonal legjobb jegyárat. Ennek a forgatókönyvnek a implementálásához a munkafolyamatot a következő helyen WorkflowServiceHostkell üzemeltetnie: . Emellett az üzenettevékenységek használatával fogadná az árkérelmet, lekérné az árakat a háttérszolgáltatásokból, és a legjobb áron válaszolna az árkérésre.

Korreláció

A korreláció két dolog egyike:

  • Az üzenetek csoportosításának módja; vagyis a kérelemüzenet és a válasz közötti kapcsolat.

  • Egy adategység szolgáltatáspéldányhoz való leképezésének módja

Első lépések

  • A korreláció használatának megkezdéséhez hozzon létre egy új projektet a Visual Studióban. Hozzon létre egy típusú CorrelationHandleváltozót.

  • Az üzenetek csoportosítására használt korreláció például egy Request-Reply korreláció, amely csoportosítja az üzeneteket.

  • Egy adat szolgáltatáspéldányhoz való leképezésére példa a tartalomalapú korreláció, amely egy adatrészt (például egy rendelésazonosítót) képez le egy adott munkafolyamat-példányra.

    • Bármely üzenetkezelési tevékenységnél kattintson a CorrelationInitializers tulajdonságra, és adjon hozzá egy QueryCorrelationInitializer a fent létrehozott CorrelationHandle változó használatával. Kattintson duplán az üzenet kívánt tulajdonságára (pl. OrderID) a legördülő menüből. Állítsa be a CorrelatesWith tulajdonságot a fent használt CorrelationHandle változóra.
  • Korrelációk elméleti dokumentációja

Korrelációs forgatókönyv

A rendelésfeldolgozási munkafolyamat az új rendelések létrehozására és a folyamatban lévő meglévő rendelések frissítésére szolgál. A forgatókönyv megvalósításához a munkafolyamatot a WorkflowServiceHost-ban kell üzemeltetni, és használni kell az üzenetküldési tevékenységeket. A megfelelő munkafolyamat frissítései biztosításához korrelációra lenne szükség a orderId alapján.

Egyszerűsített konfiguráció

A WCF konfigurációs sémája összetett, és számos nehezen megtalálható funkciót biztosít a felhasználóknak. A .NET-keretrendszer 4.6.1-ben arra összpontosítottunk, hogy segítsük a WCF-felhasználókat a szolgáltatásaik konfigurálásában a következő funkciókkal:

  • Nincs szükség explicit szolgáltatásonkénti konfigurációra. Ha nem konfigurál semmilyen <szolgáltatási> elemet a szolgáltatáshoz, és a szolgáltatás nem határoz meg programozott módon semmilyen végpontot, akkor a rendszer automatikusan hozzáad egy végpontkészletet a szolgáltatáshoz, egy szolgáltatás alapcímeként és a szolgáltatás által megvalósított szerződésenként.

  • Lehetővé teszi a felhasználó számára, hogy meghatározza a WCF-kötések és -viselkedések alapértelmezett értékeit, amelyek explicit konfiguráció nélküli szolgáltatásokra lesznek alkalmazva.

  • A standard végpontok újrahasználható, előre konfigurált végpontokat határoznak meg, amelyek rögzített értékekkel rendelkeznek egy vagy több végponttulajdonsághoz (cím, kötés és szerződés), és lehetővé teszik az egyéni tulajdonságok meghatározását.

  • Végül lehetővé teszi a ConfigurationChannelFactory<TChannel> WCF-ügyfélkonfiguráció központi felügyeletét, amely olyan helyzetekben hasznos, amikor a konfiguráció az alkalmazástartomány betöltési ideje után van kiválasztva vagy módosítva.

Első lépések

Egyszerűsített konfigurációs forgatókönyvek

  • Egy tapasztalt ASMX-fejlesztő el szeretné kezdeni a WCF használatát. Azonban a WCF túl bonyolultnak tűnik! Mi az a sok információ, amelyet egy konfigurációs fájlba kell írnom? A .NET 4-ben akár úgy is dönthet, hogy egyáltalán nem rendelkezik konfigurációs fájllal.

  • A WCF-szolgáltatások meglévő készletét nagyon nehéz konfigurálni és karbantartani. A konfigurációs fájl több ezer sornyi XML-kóddal rendelkezik, amelyek rendkívül veszélyesek az érintésre. Segítségre van szükség ahhoz, hogy ez a kódmennyiség kezelhetőbb legyen.

Adatszerződés-feloldó

A .NET-keretrendszer 3.5-ös verziójában néhány korlátozás volt az ismert típusok tervezésében:

  • Az ismert típusok dinamikus hozzáadása a szerializálás vagy a deszerializálás során nem sikerült.

  • A szerializálók nem tudták kezelni az ismeretlen xsi:type információkat.

  • A felhasználók nem adták meg, hogy milyen xsi:típust szeretnének megjeleníteni a vezetéken, például hogy kisebb legyen a vezetéken lévő szerializációs példány mérete.

A DataContractResolver ezeket a problémákat a .NET-keretrendszer 4.5-ös verziója során oldja meg.

Első lépések

Adatszerződés-feloldó forgatókönyvek

  • Elkerülheti, hogy több tíz KnownTypeAttribute objektumot deklaráljon egy szolgáltatásban.

  • Az XML-blob méretének csökkentése.

Folyamatábra

A folyamatábra egy jól ismert paradigma, amely vizuálisan ábrázolja a tartományi problémákat. Ez egy új vezérlőfolyamat-stílus, amelyet a .NET-keretrendszer 4-ben vezetünk be. A folyamatábra alapvető jellemzője, hogy egy adott időpontban csak egy tevékenység lesz végrehajtva. A folyamatábra képes ciklusokat és alternatív eredményeket kifejezni, de nem fejezheti ki natív módon több csomópont egyidejű végrehajtását.

Első lépések

Folyamatábrák és forgatókönyvek

Egy folyamatábra-tevékenység használható egy találgatásos játék implementálásához. A találgatás játék nagyon egyszerű: a számítógép kiválaszt egy véletlenszerű számot, és a játékosnak meg kell kitalálni, hogy a szám. Amikor a játékos elküldi az egyes találgatásokat, a számítógép egy tippet jelenít meg nekik (azaz "próbáljon meg kisebb számot"). Ha a játékos 7-nél kevesebb kísérletben találja meg a számot, különleges gratulációt kap a számítógéptől. Ez a játék a következő eljárási tevékenységek kombinációjával valósítható meg:

Eljárási tevékenységek (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Az eljárási tevékenységek olyan mechanizmust biztosítanak, amely a programozók számára ismerős fogalmak használatával modellezi a szekvenciális vezérlési folyamatot. Ezek a tevékenységek lehetővé teszik a hagyományosan strukturált programozási nyelv szerkezetét, és adott esetben nyelvi paritást biztosítanak olyan gyakori eljárási nyelvekkel, mint a C# és a Visual Basic.

Első lépések

Eljárási tevékenység forgatókönyvei

  • Parallel: Az intranetes dokumentumkezelő rendszer dokumentum-jóváhagyási munkafolyamatokkal rendelkezik. A dokumentumokat több részleg munkatársainak jóvá kell hagyniuk, mielőtt közzétehetik őket az intraneten. Nincs meghatározva a jóváhagyások sorrendje; bármikor előfordulhatnak, amíg a dokumentum a "jóváhagyás függőben" fázisban van. Amikor egy felhasználó elküld egy dokumentumot felülvizsgálatra, azt a közvetlen felettesének, az intranetes rendszergazdának és a belső kommunikációs vezetőnek kell jóváhagynia.

  • ParallelForEach<T>: A WF-alkalmazások egy nagyvállalaton belül kezelik a vállalati vásárlásokat. A vállalati szabályok azt diktálják, hogy a vásárlási műveletek tervezése előtt három különböző szállító értékelése szükséges. A beszerzési részleg egyik alkalmazottja három szállítót választ ki a vállalat szállítói listájából. Miután ezeket a szállítókat kiválasztották és értesítették, a vállalat megvárja a gazdasági javaslataikat. A javaslatok bármilyen sorrendben érkezhetnek. Ennek a forgatókönyvnek a WF-ben való implementálásához olyan megoldást ParallelForEach<T> használunk, amely végigvezeti a szállítók gyűjteményén, és kérni fogja a gazdasági javaslataikat. Az összes ajánlat összegyűjtése után a legjobbat választja ki és jeleníti meg.

InvokeMethod

A InvokeMethod tevékenység lehetővé teszi a nyilvános metódusok meghívását a hatókörben lévő objektumokban vagy típusokban. Támogatja a példányok és statikus metódusok paraméterekkel vagy anélkül történő meghívását (beleértve a paramétertömböket) és az általános metódusokat. Lehetővé teszi a metódus szinkron és aszinkron végrehajtását is.

Első lépések

  • A Visual Studio 2012-ben hozzon létre egy munkafolyamat-konzolalkalmazást. Adjon hozzá egy InvokeMethod tevékenységet a munkafolyamat-tervezőben, és konfiguráljon rajta statikus és példánymetelyeket.

  • Tervező dokumentációja: InvokeMethod Activity Designer

InvokeMethod forgatókönyvek

  • Meg kell hívni egy metódust egy hatókörben lévő objektumban. Például egy értéket hozzá kell adni egy szótárhoz. A rendszer meghívja a szótár példányának Add metódusát, és megadja a kulcsot és az értéket.

  • Egy metódust egy régi CLR-objektumon kell meghívni. Ahelyett, hogy egyéni tevékenységet hoz létre az örökölt osztály hívásának körbefuttatásához, ha a munkafolyamat végrehajtása során hatókörben van, InvokeMethod használható.

Hibakezelési tevékenységek

A TryCatch tevékenység olyan mechanizmust biztosít, amely a tartalmazott tevékenységek végrehajtása során előforduló kivételeket rögzíti (hasonlóan a C# és a Visual Basic Try/Catch szerkezetéhez). TryCatch a munkafolyamat szintjén biztosítja a kivételkezelést. Kezeletlen kivétel esetén a rendszer megszakítja a munkafolyamatot, és a Végül blokk nem lesz végrehajtva. Ez a viselkedés megfelel a C#-nak.

Első lépések

Hibakezelési forgatókönyvek

A tevékenységek egy halmazát végre kell hajtani, és egy adott logikát kell végrehajtani hiba esetén. Ha a hibakezelési logika során kiderül, hogy a hiba nem helyrehozható, a kivételt újra dobják, és a szülőtevékenység (vagy a gazdagép) kezeli a problémát.

Tevékenység kiválasztása

A Pick tevékenység eseményalapú vezérlési folyamatmodellezést biztosít a WF-ben. Pick több ágat tartalmaz, amelyek mindegyike adott eseményre vár, mielőtt elindulna. Ebben a beállításban a Pick hasonlóan viselkedik, mint egy Switch<T>, amelynél a tevékenység csak az általa figyelt események közül az egyik eseményt hajtja végre. Minden ág eseményvezérelt, és a bekövetkező esemény először a megfelelő ágat futtatja. Minden más ág megszakítja és leállítja az események figyelését.

Első lépések

Forgatókönyv kiválasztása

Fel kell kérni a felhasználót a bemenet megadására. Normál körülmények között a fejlesztő olyan metódushívást használna, amely a felhasználó ReadLine bemenetét kéri. A beállítással az a probléma, hogy a program megvárja, amíg a felhasználó be nem ad valamit. Ebben a forgatókönyvben időtúllépésre van szükség a blokkoló tevékenységek letiltásának feloldásához. Gyakori forgatókönyv, hogy egy feladatot egy adott időtartamon belül el kell végezni. A blokkolási tevékenység időzítése olyan forgatókönyv, amelyben a Pick kitűnő értéket képvisel.

WCF útválasztási szolgáltatás

Az útválasztási szolgáltatás úgy lett kialakítva, hogy egy általános szoftveres útválasztó legyen, amely lehetővé teszi annak szabályozását, hogy a WCF-üzenetek hogyan áramlanak az ügyfelek és a szolgáltatások között. Az Útválasztási szolgáltatás lehetővé teszi az ügyfelek elkülönítését a szolgáltatásoktól, ami sokkal nagyobb szabadságot biztosít a támogatott konfigurációk és a szolgáltatások üzemeltetésének megfontolásakor rendelkezésre álló rugalmasság szempontjából. A .NET-keretrendszer 3.5-ben az ügyfelek és a szolgáltatások szorosan össze voltak kapcsolva; az ügyfélnek mindent tudnia kellett azokkal a szolgáltatásokkal kapcsolatban, amelyekkel kommunikálnia kellett, és azt is, hogy hol találhatók. Emellett a .NET-keretrendszer 3.5-ös WCF-jének a következő korlátozásai voltak:

  • A hibakezelés összetett volt, mivel ezt a logikát kézzel be kellett kódolni a kliens alkalmazásba.

  • Az ügyfeleknek és a szolgáltatásoknak mindig ugyanazokat a kötéseket kellett használniuk.

  • A szolgáltatások ritkán voltak jól faktorálva: egyszerűbb, ha az ügyfél egy olyan szolgáltatással beszél, amely mindent megvalósít, ahelyett, hogy több szolgáltatás közül kellene választania.

A .NET 4 útválasztási szolgáltatása úgy lett kialakítva, hogy megkönnyítse a problémák megoldását. Az új útválasztási szolgáltatás a következő funkciókkal rendelkezik:

  1. Tartalomalapú útválasztás (MessageFilter az objektumok megvizsgálnak egy üzenetet annak meghatározásához, hogy hová kell küldeni.)

  2. Protokoll összekapcsolása (kommunikáció és üzenet)

  3. Hibakezelés (az útválasztó elkapja a kommunikációs kivételeket, és átvált a biztonsági mentési végpontokra)

  4. A MessageFilterTable<TFilterData> és az útválasztási konfiguráció dinamikus (memóriában lévő) frissítése.

Első lépések

  1. Dokumentáció: Útválasztás

  2. Minták: Útválasztási szolgáltatások [WCF-minták]

  3. Blog: Útválasztási szabályok!

Útválasztási forgatókönyvek

Az útválasztási szolgáltatás a következő esetekben hasznos:

  • Az ügyfelek anélkül beszélhetnek több szolgáltatáshoz, hogy közvetlenül kellene őket kezelniük.

  • Az ügyfelek további logikát hajthatnak végre egy ügyfélkérésen annak meghatározásához, hogy hová irányítják

  • Bontsa le az ügyfél által végrehajtott műveleteket több szolgáltatás-implementációra anélkül, hogy az ügyfelet újra kellene bontani.

  • Az ügyfelek és a szolgáltatások különböző kötésekkel dolgoznak, különböző biztonsági beállításokkal.

  • Az ügyfelek képesek lehetnek ellenállóbbakká válni a hibákkal vagy a szolgáltatások elérhetetlenségével szemben.

WCF-felderítés

A WCF Discovery egy keretrendszer-technológia, amellyel felderítési mechanizmust építhet be az alkalmazásinfrastruktúrába. Ezzel felderíthetővé teheti a szolgáltatást, és konfigurálhatja az ügyfeleket a szolgáltatások keresésére. Az ügyfeleknek már nem kell szigorúan kódolniuk a végponttal, így az alkalmazás robusztusabb és hibatűrőbb. A Discovery tökéletes platform az automatikus konfigurációs képességek alkalmazásba való létrehozásához.

A termék a WS-Discovery szabványra épül. Úgy tervezték, hogy interoperábilis, bővíthető és általános legyen. A termék két működési módot támogat:

  1. Felügyelt: ha a hálózaton van egy entitás, amely ismeri a meglévő szolgáltatásokat, az ügyfelek közvetlenül lekérdezik az adatokat. Ez hasonló az Active Directoryhoz.

  2. Alkalmi: ahol az ügyfelek csoportos küldésű üzeneteket használnak a szolgáltatások megkereséséhez.

Ezenkívül a felderítési üzenetek hálózati protokoll-agnosztikusak; azokat bármely olyan protokollon használhatja, amely támogatja a mód követelményeit. A felderítési csoportos küldési üzenetek például az UDP-csatornán vagy bármely más, csoportos küldést támogató hálózaton keresztül küldhetők. Ezek a tervezési pontok a funkciók rugalmasságával kombinálva lehetővé teszik, hogy a felderítést kifejezetten a megoldásához igazítsa.

Első lépések

Felderítési forgatókönyvek

A fejlesztő nem szeretné a kódvégpontokat lekeményíteni, mivel nem ismert, hogy mikor lesz elérhető a szolgáltatásom. Ehelyett a fejlesztő futásidőben szeretne szolgáltatást választani. További elkülönítésre, robusztusságra és automatikus konfigurálásra van szükség az alkalmazás összetevői között.

Nyomon követés

A munkafolyamat-nyomkövetés betekintést nyújt a munkafolyamat-példányok végrehajtásába. A nyomkövetési események a munkafolyamat példányszintjén és a munkafolyamaton belüli tevékenységek végrehajtásakor lesznek kibocsátva. A nyomkövetési rekordokra való feliratkozáshoz hozzá kell adni egy munkafolyamat-követő résztvevőt a munkafolyamat-gazdagéphez. A nyomkövetési rekordok szűrése nyomkövetési profillal történik. A .NET-keretrendszer egy ETW (Event Tracing for Windows) nyomkövetési résztvevőt biztosít, és egy alapprofil van telepítve a machine.config fájlban.

Első lépések

  1. A Visual Studio 2010-ben hozzon létre egy WCF munkafolyamat szolgáltatás alkalmazás projektet. A vászonra egy Receive és SendReply pár lesz elhelyezve kezdetnek.

  2. Nyissa meg a web.config, és adjon hozzá profil nélküli ETW nyomkövetési viselkedést.

    1. A rendszer az alapértelmezett profilt használja.

    2. Nyissa meg az eseménynaplót, és engedélyezze az elemzési csatornát a következő csomóponton: Eseménynapló, Alkalmazások és szolgáltatások naplói, Microsoft, Windows, Application Server-Applications. Kattintson a jobb gombbal az Elemzés elemre, és válassza a Napló engedélyezése lehetőséget.

    3. Futtassa a munkafolyamat szolgáltatást.

    4. Figyelje meg a munkafolyamat-követési eseményeket az eseménynaplóban.

  3. Minták: Nyomon követés

  4. Elméleti dokumentáció: Munkafolyamat nyomon követése és nyomon követése

SQL-munkafolyamat-példánytár

Ez SqlWorkflowInstanceStore egy példánytároló SQL Server-alapú implementációja. A példánytárak a futó példány állapotát tárolják az adott példány betöltéséhez és folytatásához szükséges összes adattal együtt. A szolgáltatási gazdagép utasítja a példánytárat, hogy mentse a példány állapotát, ha a munkafolyamat fennmarad, és utasítja a példánytárat, hogy töltse be a példány állapotát, amikor egy üzenet érkezik az adott példányra, vagy amikor egy késleltetési tevékenység lejár.

Első lépések

  1. A Visual Studio 2012-ben hozzon létre egy implicit vagy explicit Persist tevékenységet tartalmazó munkafolyamatot. Adja hozzá a SqlWorkflowInstanceStore viselkedést a munkafolyamat-szolgáltatás gazdagépéhez. Ez kódban vagy az alkalmazáskonfigurációs fájlban is elvégezhető.

  2. Minták: Állandóság

  3. Elméleti dokumentáció: SQL Workflow Instance Store.