Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
Ü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
A Visual Studio 2010-ben hozzon létre egy WCF munkafolyamat-szolgáltatásalkalmazás-projektet: ezt a projektet úgy állítja be, hogy a WorkflowServiceHost webes hosztkörnyezetben legyen használható.
Nem üzenetkezelési munkafolyamat üzemeltetéséhez adjon hozzá egy egyéni WorkflowHostingEndpoint-t, amely egy üzenet alapján hozza létre a példányt.
A munkafolyamat-példányok szabályozhatók (például felfüggeszthetők vagy megszüntethetők), ha hozzáadnak egy WorkflowControlEndpointWorkflowServiceHost , majd egy WorkflowControlClient.
A minták a WorkflowServiceHost következő szakaszokban találhatók:
Alkalmazás: Felfüggesztett példánykezelés
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 Receive tevékenységen kattintson a CorrelationInitializers tulajdonságra, és adjon hozzá egy RequestReplyCorrelationInitializer a fentiekben első lépésként létrehozott CorrelationHandle használatával.
Hozzon létre egy SendReply tevékenységet úgy, hogy a Receive elemen jobb gombbal kattint, majd a "SendReply létrehozása" lehetőséget választja. Illessze be a munkafolyamatba a Receive tevékenység után.
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
CorrelationInitializerstulajdonsá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 aCorrelatesWithtulajdonságot a fent használt CorrelationHandle változóra.
- Bármely üzenetkezelési tevékenységnél kattintson a
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
Minták:
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
A Visual Studio 2012-ben hozzon létre egy munkafolyamat-konzolalkalmazást. Folyamatábra hozzáadása a munkafolyamat-tervezőben.
A folyamatábra a következő osztályokat használja:
Minták:
Tervező dokumentációja:
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
A Visual Studio 2012-ben hozzon létre egy munkafolyamat-konzolalkalmazást. Adjon hozzá eljárási tevékenységeket a munkafolyamat-tervezőben.
Minták:
Tervező dokumentációja:
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
A Visual Studio 2012-ben hozzon létre egy munkafolyamat-konzolalkalmazást. TryCatch Tevékenység hozzáadása a munkafolyamat-tervezőben.
Minta: Hibakezelés folyamatábra-tevékenységben a TryCatch használatával
Tervező dokumentációja: Hibakezelési tevékenységtervezők
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
A Visual Studio 2012-ben hozzon létre egy munkafolyamat-konzolalkalmazást. Pick Tevékenység hozzáadása a munkafolyamat-tervezőben.
Tervező dokumentációja: Tevékenységtervező kiválasztása
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:
Tartalomalapú útválasztás (MessageFilter az objektumok megvizsgálnak egy üzenetet annak meghatározásához, hogy hová kell küldeni.)
Protokoll összekapcsolása (kommunikáció és üzenet)
Hibakezelés (az útválasztó elkapja a kommunikációs kivételeket, és átvált a biztonsági mentési végpontokra)
A MessageFilterTable<TFilterData> és az útválasztási konfiguráció dinamikus (memóriában lévő) frissítése.
Első lépések
Dokumentáció: Útválasztás
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:
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.
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
Dokumentáció: WCF-felderítés
Minták: Discovery (Minták)
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
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.
Nyissa meg a web.config, és adjon hozzá profil nélküli ETW nyomkövetési viselkedést.
A rendszer az alapértelmezett profilt használja.
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.
Futtassa a munkafolyamat szolgáltatást.
Figyelje meg a munkafolyamat-követési eseményeket az eseménynaplóban.
Minták: Nyomon követés
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
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ő.
Minták: Állandóság
Elméleti dokumentáció: SQL Workflow Instance Store.