Dela via


Funktionsspecifika funktioner för Windows Workflow Foundation

.NET Framework 4 lägger till ett antal funktioner i Windows Workflow Foundation. Det här dokumentet beskriver ett antal av de nya funktionerna och innehåller information om scenarier där de kan vara användbara.

Meddelandeaktiviteter

Meddelandeaktiviteterna (Receive, SendReply, Send, ReceiveReply) används för att skicka och ta emot WCF-meddelanden från arbetsflödet. Receive och SendReply aktiviteter används för att bilda en WCF-tjänståtgärd (Windows Communication Foundation) som exponeras via WSDL precis som WCF-standardwebbtjänster. Send och ReceiveReply används för att använda en webbtjänst som liknar en WCF ChannelFactory. Det finns även en lägg till tjänstreferens för Workflow Foundation som genererar förkonfigurerade aktiviteter.

Komma igång med meddelandeaktiviteter

  • I Visual Studio 2012 skapar du ett WCF Workflow Service Application-projekt. Ett Receive par och SendReply placeras på arbetsytan.

  • Högerklicka på projektet och välj Lägg till tjänstreferens. Peka på en befintlig webbtjänsts WSDL och klicka på OK. Skapa projektet för att visa de genererade aktiviteterna (implementerade med och Send ReceiveReply) i verktygslådan.

  • Dokumentation om arbetsflödestjänster

Exempelscenario för meddelandeaktiviteter

En BestPriceFinder tjänst anropar flera flygbolagstjänster för att hitta det bästa biljettpriset för en viss rutt. Om du implementerar det här scenariot måste du använda meddelandeaktiviteterna för att ta emot prisbegäran, hämta priserna från serverdelstjänsterna och svara på prisbegäran med bästa pris. Det skulle också kräva att du använder andra färdiga aktiviteter för att skapa affärslogik för att beräkna det bästa priset.

WorkflowServiceHost

WorkflowServiceHost är den färdiga arbetsflödesvärden som stöder flera instanser, konfiguration och WCF-meddelanden (även om arbetsflödena inte krävs för att använda meddelanden för att vara värd för). Den integreras också med beständighet, spårning och instanskontroll via en uppsättning tjänstbeteenden. Precis som WCF:s ServiceHostWorkflowServiceHost kan den vara lokalt installerad i en konsol/WinForms/WPF-app eller Windows-tjänst, eller webbaserad (som en .xamlx-fil) i IIS eller WAS.

Komma igång med arbetsflödestjänstvärden

WorkflowServiceHost Scenario

En BestPriceFinder-tjänst anropar flera flygbolagstjänster för att hitta det bästa biljettpriset för en viss rutt. Om du implementerar det här scenariot måste du vara värd för arbetsflödet i WorkflowServiceHost. Den skulle också använda meddelandeaktiviteterna för att ta emot prisbegäran, hämta priserna från serverdelstjänsterna och svara på prisbegäran med det bästa priset.

Korrelation

En korrelation är en av två saker:

  • Ett sätt att gruppera meddelanden tillsammans; det vill: relationen mellan ett begärandemeddelande och dess svar.

  • Ett sätt att mappa en datadel till en tjänstinstans

Komma igång

  • Kom igång med korrelation genom att skapa ett nytt projekt i Visual Studio. Skapa en variabel av typen CorrelationHandle.

  • Ett exempel på korrelation som används för att gruppera meddelanden är en korrelation mellan begäran och svar som grupperar meddelanden tillsammans.

  • Ett exempel på att mappa en databit till en tjänstinstans är innehållsbaserad korrelation som mappar en datadel (till exempel ett order-ID) till en viss arbetsflödesinstans.

    • På valfri meddelandeaktivitet klickar du på CorrelationInitializers egenskapen och lägger till en QueryCorrelationInitializer med hjälp av variabeln CorrelationHandle som skapades ovan. Dubbelklicka på den önskade egenskapen i meddelandet (t.ex. OrderID) från den nedrullningsbara menyn. Ange egenskapen CorrelatesWith till variabeln CorrelationHandle som används ovan.
  • Dokumentation om konceptuell korrelation

Korrelationsscenario

Ett arbetsflöde för orderbearbetning används för att hantera skapande av ny order och uppdatering av befintliga beställningar som pågår. Om du implementerar det här scenariot måste du vara värd för arbetsflödet i WorkflowServiceHost och använda meddelandeaktiviteterna. Det skulle också kräva korrelation baserat på orderId för att säkerställa att uppdateringar görs i rätt arbetsflöde.

Förenklad konfiguration

WCF-konfigurationsschemat är komplext och ger användarna många svåra att hitta funktioner. I .NET Framework 4.6.1 har vi fokuserat på att hjälpa WCF-användare att konfigurera sina tjänster med följande funktioner:

  • Tar bort behovet av explicit konfiguration per tjänst. Om du inte konfigurerar några <tjänstelement> för tjänsten och tjänsten inte definierar programmatiskt någon slutpunkt läggs en uppsättning slutpunkter automatiskt till i tjänsten, en per tjänstbasadress och per kontrakt som implementeras av tjänsten.

  • Gör det möjligt för användaren att definiera standardvärden för WCF-bindningar och beteenden, som tillämpas på tjänster utan explicit konfiguration.

  • Standardslutpunkter definierar återanvändbara förkonfigurerade slutpunkter som har fasta värden för en eller flera av slutpunktsegenskaperna (adress, bindning och kontrakt) och tillåter definition av anpassade egenskaper.

  • Slutligen ConfigurationChannelFactory<TChannel> kan du utföra central hantering av WCF-klientkonfiguration, användbart i scenarier där konfigurationen väljs eller ändras efter programdomänens inläsningstid.

Komma igång

Förenklade konfigurationsscenarier

  • En erfaren ASMX-utvecklare vill börja använda WCF. WCF verkar dock alldeles för komplicerat! Vilken information behöver jag för att skriva i en konfigurationsfil? I .NET 4 kan du till och med välja att inte ha någon konfigurationsfil alls.

  • En befintlig uppsättning WCF-tjänster är mycket svåra att konfigurera och underhålla. Konfigurationsfilen har tusentals rader XML-kod som är extremt farliga att röra vid. Hjälp krävs för att minska mängden kod till något mer hanterbart.

Lösare för datakontrakt

I .NET Framework 3.5 fanns det några begränsningar i utformningen av kända typer:

  • Det gick inte att lägga till kända typer dynamiskt under serialisering eller deserialisering.

  • Serialiserare kunde inte hantera okänd xsi:type-information.

  • Det gick inte för användarna att ange vilken xsi:type de vill ska visas på kabeln för att till exempel göra storleken på en serialiseringsinstans på tråden mindre.

DataContractResolver löser dessa problem i .NET Framework 4.5.

Komma igång

Scenarier för datakontraktslösare

  • Undvik att behöva deklarera tiotals KnownTypeAttribute objekt i en tjänst.

  • Minska storleken på XML-bloben.

Flödesschema

Flödesschema är ett välkänt paradigm för att visuellt representera domänproblem. Det är ett nytt kontrollflödesformat som vi introducerar i .NET Framework 4. En grundläggande egenskap hos Flowchart är att endast en aktivitet körs vid en viss tidpunkt. Flödesscheman kan uttrycka loopar och alternativa resultat, men kan inte internt uttrycka samtidig körning av flera noder.

Komma igång

Flödesschemascenarier

En flödesschemaaktivitet kan användas för att implementera ett gissningsspel. Gissningsspelet är mycket enkelt: datorn väljer ett slumpmässigt tal och spelaren måste gissa det talet. När spelaren skickar varje gissning visar datorn ett tips (dvs. "försök med ett lägre tal"). Om spelaren hittar numret i mindre än 7 försök får de en särskild gratulation från datorn. Det här spelet kan implementeras med en kombination av följande processuella aktiviteter:

Processuella aktiviteter (Sekvens, If, ForEach, Switch, Assign, DoWhile, While)

Processuella aktiviteter ger en mekanism för att modellera sekventiellt kontrollflöde med hjälp av begrepp som är bekanta för programmerare. Dessa aktiviteter möjliggör traditionellt strukturerade programmeringsspråkkonstruktioner och, när det är lämpligt, ger språkparitet med vanliga procedurspråk som C# och Visual Basic.

Komma igång

Scenarier för proceduraktivitet

  • Parallel: Ett intranätdokumenthanteringssystem har ett arbetsflöde för dokumentgodkännande. Dokument måste godkännas av personer på flera avdelningar innan de kan publiceras till intranätet. Det finns ingen etablerad order för godkännandena. de kan inträffa när som helst medan dokumentet är i fasen "godkännande väntar". När en användare skickar ett dokument för granskning måste det godkännas av deras direktansvarige, intranätadministratören och den interna kommunikationschefen.

  • ParallelForEach<T>: Ett WF-program hanterar företagsköp i ett stort företag. Företagets regler föreskriver att värderingen av tre olika leverantörer krävs innan du planerar någon köpåtgärd. En anställd från inköpsavdelningen väljer tre leverantörer från företagets leverantörslista. När dessa leverantörer har valts ut och meddelats väntar företaget på sina ekonomiska förslag. Förslagen kan komma i vilken ordning som helst. För att implementera det här scenariot i WF använder vi en ParallelForEach<T> som itererar genom vår samling av leverantörer och ber om deras ekonomiska förslag. När alla erbjudanden har samlats in väljs och visas den bästa.

InvokeMethod

Aktiviteten InvokeMethod tillåter att offentliga metoder anropas i objekt eller typer i omfånget. Den stöder anropande instanser och statiska metoder med eller utan parametrar (inklusive parametermatriser) och generiska metoder. Det gör det också möjligt att köra metoden synkront och asynkront.

Komma igång

  • Skapa ett arbetsflödeskonsolprogram i Visual Studio 2012. Lägg till en InvokeMethod aktivitet i arbetsflödesdesignern och konfigurera statiska metoder och instansmetoder på den.

  • Designerdokumentation: InvokeMethod Activity Designer

InvokeMethod-scenarier

  • En metod i ett objekt i omfånget måste anropas. Ett värde måste till exempel läggas till i en ordlista. Metoden Lägg till för instansen av ordlistan anropas och nyckeln och värdet anges.

  • En metod måste anropas på ett äldre CLR-objekt. I stället för att skapa en anpassad aktivitet för att omsluta anropet till den äldre klassen kan du använda omfånget under arbetsflödeskörningen InvokeMethod .

Felhanteringsaktiviteter

Aktiviteten TryCatch ger en mekanism för att fånga undantag som inträffar under körningen av en uppsättning inneslutna aktiviteter (liknar Try/Catch-konstruktionen i C# och Visual Basic). TryCatch tillhandahåller undantagshantering på arbetsflödesnivå. När ett ohanterat undantag utlöses avbryts arbetsflödet och blocket Slutligen körs inte. Det här beteendet är konsekvent med C#.

Komma igång

Scenarier för felhantering

En uppsättning aktiviteter måste köras och specifik logik måste köras när ett fel inträffar. Om det under felhanteringslogik konstateras att felet inte kan återställas, kommer undantaget att återväxas och den överordnade aktiviteten (eller värden) hanterar problemet.

Välj aktivitet

Aktiviteten Pick tillhandahåller händelsebaserad kontrollflödesmodellering i WF. Pick innehåller många grenar där varje gren väntar på att en viss händelse ska inträffa innan den körs. I den här konfigurationen fungerar en Pick som liknar en Switch<T> som aktiviteten endast kör en av de händelser som den lyssnar på. Varje gren är händelsedriven och händelsen som inträffar kör motsvarande gren först. Alla andra grenar avbryter och slutar lyssna efter händelser.

Komma igång

Välj scenario

En användare måste uppmanas att ange indata. Under normala omständigheter skulle utvecklaren använda ett metodanrop som ReadLine för att fråga efter en användares indata. Problemet med den här konfigurationen är att programmet väntar tills användaren anger något. I det här scenariot krävs en timeout för att avblockera en blockerande aktivitet. Ett vanligt scenario är ett scenario som kräver att en uppgift slutförs inom en viss tidsperiod. Att ta tid på en blockerande aktivitet är ett scenario där Pick lägger till mycket värde.

WCF-routningstjänst

Routningstjänsten är utformad för att vara en allmän programvarurouter som gör att du kan styra hur WCF-meddelanden flödar in mellan dina klienter och tjänster. Med routningstjänsten kan du frikoppla dina klienter från dina tjänster, vilket ger dig mycket större frihet när det gäller de konfigurationer som du kan stödja och den flexibilitet du har när du överväger hur du ska vara värd för dina tjänster. I .NET Framework 3.5 var klienter och tjänster nära kopplade. en klient var tvungen att känna till alla tjänster som behövdes för att prata med och var de befann sig. Dessutom hade WCF i .NET Framework 3.5 följande begränsningar:

  • Felhanteringen var komplex eftersom den här logiken måste hårdkodas i klienten.

  • Klienter och tjänster var tvungna att alltid använda samma bindningar.

  • Tjänsterna var sällan välräknade: det är lättare att låta klienten prata med en tjänst som implementerar allt i stället för att behöva välja mellan flera tjänster.

Routningstjänsten i .NET 4 är utformad för att göra dessa problem enklare att lösa. Den nya routningstjänsten har följande funktioner:

  1. Innehållsbaserad routning (MessageFilter objekt undersöker ett meddelande för att avgöra var det ska skickas.)

  2. Protokollbryggning (transport och meddelande)

  3. Felhantering (routern fångar upp kommunikationsundanstag och redundansväxlar till slutpunkter för säkerhetskopiering)

  4. Dynamisk uppdatering (i minnet) av och routningskonfiguration MessageFilterTable<TFilterData> .

Komma igång

  1. Dokumentation: Routning

  2. Exempel: Routningstjänster [WCF-exempel]

  3. Blogg: Routningsregler!

Routningsscenarier

Routningstjänsten är användbar i följande scenarier:

  • Klienter kan prata med flera tjänster utan att behöva adressera dem direkt.

  • Klienter kan utföra ytterligare logik på en klientbegäran för att avgöra var den ska dirigeras

  • Dela upp de åtgärder som en klient utför i flera tjänstimplementeringar utan att omstrukturera klienten.

  • Klienter och tjänster kan tala olika bindningar med olika säkerhetsinställningar.

  • Klienter kan aktiveras för att vara mer robusta mot fel eller otillgänglighet för tjänster.

WCF-identifiering

WCF Discovery är en ramverksteknik som gör att du kan införliva en identifieringsmekanism i din programinfrastruktur. Du kan använda detta för att göra tjänsten identifierbar och konfigurera dina klienter att söka efter tjänster. Klienter behöver inte längre hårdkodas med slutpunkten, vilket gör programmet mer robust och feltolerant. Identifiering är den perfekta plattformen för att skapa funktioner för automatisk konfiguration i ditt program.

Produkten bygger på WS-Discovery-standarden. Den är utformad för att vara driftskompatibel, utökningsbar och generisk. Produkten stöder två driftlägen:

  1. Hanterad: om det finns en entitet i nätverket som är kunnig om befintliga tjänster frågar klienter direkt efter information. Detta motsvarar Active Directory.

  2. Ad hoc: där klienter använder multicast-meddelanden för att hitta tjänster.

Dessutom är identifieringsmeddelanden nätverksprotokollagnostiska. du kan använda dem ovanpå alla protokoll som stöder lägeskraven. Identifiering av multicast-meddelanden kan till exempel skickas via UDP-kanalen eller något annat nätverk som stöder multicast-meddelanden. Med de här designpunkterna i kombination med funktionsflexitet kan du anpassa identifieringen specifikt till din lösning.

Komma igång

Identifieringsscenarier

En utvecklare vill inte hårdkoda slutpunkter eftersom det är okänt när min tjänst kommer att vara tillgänglig. I stället vill utvecklaren välja en tjänst vid körning. Mer avkoppling, robusthet och automatisk konfiguration krävs mellan komponenterna i programmet.

Spårning

Arbetsflödesspårning ger insikt i körningen av en arbetsflödesinstans. Spårningshändelserna genereras från ett arbetsflöde på arbetsflödesinstansnivå och när aktiviteter i arbetsflödet körs. En arbetsflödesspårningsdeltagare måste läggas till i arbetsflödesvärden för att prenumerera på spårningsposter. Spårningsposterna filtreras med hjälp av en spårningsprofil. .NET Framework tillhandahåller en ETW-spårningsdeltagare (Händelsespårning för Windows) och en grundläggande profil installeras i filen machine.config.

Komma igång

  1. I Visual Studio 2010 skapar du ett WCF Workflow Service Application-projekt. Ett Receive par och SendReply placeras på arbetsytan för att starta.

  2. Öppna web.config och lägg till ett ETW-spårningsbeteende utan profil.

    1. Standardprofilen används.

    2. Öppna loggboken och aktivera analyskanalen i följande nod: Loggboken, Program- och tjänstloggar, Microsoft, Windows, Programserver-Program. Högerklicka på Analys och välj Aktivera logg.

    3. Kör arbetsflödestjänsten.

    4. Observera händelser för arbetsflödesspårning i loggboken.

  3. Exempel: Spårning

  4. Konceptuell dokumentation: Spårning och spårning av arbetsflöden

SQL Workflow Instance Store

SqlWorkflowInstanceStore är en SQL Server-baserad implementering av ett instansarkiv. Ett instanslager lagrar tillståndet för en instans som körs tillsammans med alla data som krävs för att läsa in och återuppta den instansen. Tjänstvärden instruerar instansarkivet att spara instanstillståndet om arbetsflödet kvarstår och instruerar instansarkivet att läsa in instanstillståndet när ett meddelande anländer för den instansen eller om en fördröjningsaktivitet upphör att gälla.

Komma igång

  1. I Visual Studio 2012 skapar du ett arbetsflöde som innehåller en implicit eller explicit Persist aktivitet. Lägg till beteendet i SqlWorkflowInstanceStore arbetsflödestjänstvärden. Detta kan göras i kod eller i programkonfigurationsfilen.

  2. Exempel: Beständighet

  3. Konceptuell dokumentation: SQL Workflow Instance Store.