Nyheter i Windows Workflow Foundation i .NET Framework 4.5
Windows Workflow Foundation (WF) i .NET Framework 4.5 introducerar många nya funktioner, till exempel nya aktiviteter, designerfunktioner och arbetsflödesutvecklingsmodeller. Många, men inte alla, av de nya arbetsflödesfunktionerna som introducerades i .NET Framework 4.5 stöds i den nya arbetsflödesdesignern. Mer information om de nya funktionerna som stöds finns i Support for New Workflow Foundation 4.5 Features in the Rehosted Workflow Designer (Stöd för nya Workflow Foundation 4.5-funktioner i arbetsflödesdesignern med värd för nytt värd). Mer information om hur du migrerar .NET Framework 3.0- och .NET Framework 3.5-arbetsflödesprogram för att använda den senaste versionen finns i Migreringsvägledning. Den här artikeln innehåller en översikt över de nya arbetsflödesfunktionerna som introducerades i .NET Framework 4.5.
Varning
De nya funktionerna i Windows Workflow Foundation som introducerades i .NET Framework 4.5 är inte tillgängliga för projekt som riktar sig mot tidigare versioner av ramverket. Om ett projekt som är avsett för .NET Framework 4.5 omdirigeras till en tidigare version av ramverket kan flera problem uppstå.
- C#-uttryck ersätts i designern med meddelandet Värde har angetts i XAML.
- Många byggfel inträffar, inklusive följande fel.
Filformatet är inte kompatibelt med det aktuella målramverket. Om du vill konvertera filformatet sparar du filen uttryckligen. Det här felmeddelandet försvinner när du har sparat filen och öppnar designern igen.
Versionshantering av arbetsflöde
.NET Framework 4.5 introducerade flera nya versionsfunktioner baserade på den nya WorkflowIdentity klassen. WorkflowIdentity ger upphovsmän till arbetsflödesprogram en mekanism för att mappa en bevarad arbetsflödesinstans med dess definition.
Utvecklare som använder WorkflowApplication värdtjänster kan använda WorkflowIdentity för att aktivera värd för flera versioner av ett arbetsflöde sida vid sida. Instanser av beständiga arbetsflöden kan läsas in med hjälp av den nya WorkflowApplicationInstance klassen och sedan DefinitionIdentity kan användas av värden för att tillhandahålla rätt version av arbetsflödesdefinitionen när instansiering av WorkflowApplication. Mer information finns i Använda WorkflowIdentity and Versionsing ochHow to: Host Multiple Versions of a Workflow side-by-Side (Använda WorkflowIdentity and Versionsing) och How to: Host Multiple Versions of a Workflow side-by-Side (Hantera flera versioner av ett arbetsflöde sida vid sida).
WorkflowServiceHost är nu en värd med flera versioner. När en ny version av en arbetsflödestjänst distribueras skapas nya instanser med den nya tjänsten, men befintliga instanser slutförs med den tidigare versionen. Mer information finns i Versioneringen sida vid sida i WorkflowServiceHost.
Dynamisk uppdatering introduceras som ger en mekanism för att uppdatera definitionen av en bevarad arbetsflödesinstans. Mer information finns i Dynamisk uppdatering och Så här: Uppdatera definitionen av en arbetsflödesinstans som körs.
Ett SqlWorkflowInstanceStoreSchemaUpgrade.sql-databasskript tillhandahålls för att uppgradera beständighetsdatabaser som skapats med hjälp av .NET Framework 4 databasskript. Det här skriptet uppdaterar .NET Framework 4 persistence-databaser för att stödja de nya versionsfunktionerna som introducerades i .NET Framework 4.5. De bevarade arbetsflödesinstanserna i databasen får standardvärden för versionshantering och kan delta i körning sida vid sida och dynamisk uppdatering. Mer information finns i Uppgradera .NET Framework 4 persistence-databaser för att stödja versionshantering av arbetsflöden.
Aktiviteter
Det inbyggda aktivitetsbiblioteket innehåller nya aktiviteter och nya funktioner för befintliga aktiviteter.
NoPersist-omfång
NoPersistScope är en ny containeraktivitet som förhindrar att ett arbetsflöde sparas när NoPersistScopes underordnade aktiviteter körs. Detta är användbart i scenarier där det inte är lämpligt att arbetsflödet bevaras, till exempel när arbetsflödet använder datorspecifika resurser som filreferenser eller under databastransaktioner. Tidigare, för att förhindra att beständighet inträffar under en aktivitets körning, krävdes en anpassad NativeActivity som använde en NoPersistHandle .
Nya flödesschemafunktioner
Flödesscheman uppdateras för .NET Framework 4.5 och har följande nya funktioner:
Egenskapen
DisplayName
för en aktivitet eller FlowDecision en FlowSwitch<T> aktivitet kan redigeras. På så sätt kan aktivitetsdesignern visa mer information om aktivitetens syfte.Flödesscheman har en ny egenskap som heter ValidateUnconnectedNodes. Standardvärdet för den här egenskapen är
False
. Om den här egenskapen är inställd påTrue
kommer noder med oanslutna flödesscheman att generera valideringsfel.
Stöd för partiellt förtroende
Arbetsflöden i .NET Framework 4 krävde en fullständigt betrodd programdomän. I .NET Framework 4.5 kan arbetsflöden fungera i en partiell förtroendemiljö. I en partiell förtroendemiljö kan komponenter från tredje part användas utan att ge dem fullständig åtkomst till värdens resurser. Vissa problem med att köra arbetsflöden med partiellt förtroende är följande:
Användning av äldre komponenter (inklusive regler) som ingår i Interop aktiviteten stöds inte under partiellt förtroende.
Det går inte att köra arbetsflöden med partiellt förtroende WorkflowServiceHost .
Att bevara undantag i ett scenario med partiellt förtroende är ett potentiellt säkerhetshot. Om du vill inaktivera undantagsbeständighet måste ett tillägg av typen ExceptionPersistenceExtension läggas till i projektet för att du ska kunna välja bort undantag som kvarstår. Följande kodexempel visar hur du implementerar den här typen.
public class ExceptionPersistenceExtension { public ExceptionPersistenceExtension() { this.PersistExceptions = false; } public bool PersistExceptions { get; set; } }
Om undantag inte ska serialiseras kontrollerar du att undantag används i en NoPersistScope.
Aktivitetsförfattare bör åsidosätta CacheMetadata för att undvika att arbetsflödeskörningen automatiskt kör reflektion mot typen. Argument och underordnade aktiviteter måste vara icke-null och Bind måste anropas explicit. Mer information om åsidosätter CacheMetadatafinns i Exponera data med CacheMetadata. Dessutom måste instanser av argument som är av en typ som är
internal
eller privat skapas uttryckligen i CacheMetadata för att undvika att skapas med reflektion.Typer kommer inte att använda ISerializable eller SerializableAttribute för serialisering. Typer som ska serialiseras måste ha stöd DataContractSerializerför .
Uttryck som använder LambdaValue<TResult> kräver RestrictedMemberAccess, och fungerar därför inte under partiellt förtroende. Arbetsflöden som använder LambdaValue<TResult> bör ersätta uttrycken med aktiviteter som härleds från CodeActivity<TResult>. .
Uttryck kan inte kompileras med hjälp av TextExpressionCompiler eller visual basic-värdbaserade kompilatorer i partiellt förtroende, men tidigare kompilerade uttryck kan köras.
En enda sammansättning som använder transparens på nivå 2 kan inte användas i .NET Framework 4, .NET Framework 4.6.1 i fullständigt förtroende och .NET Framework 4.6.1 i partiellt förtroende.
Nya designerfunktioner
Designersökning
För att göra större arbetsflöden mer hanterbara kan arbetsflöden nu sökas efter nyckelord. Den här funktionen är endast tillgänglig i Visual Studio. den här funktionen är inte tillgänglig i en värdskapare. Det finns två typer av sökningar:
Snabbsökning, initierad med antingen Ctrl+F eller Redigera, Sök och ersätt, Snabbsökning.
Sök i Filer, initierat med antingen Ctrl+Skift+F eller Redigera, Sök och ersätt, Sök i filer.
Observera att Ersätt inte stöds.
Snabbsökning
Nyckelord som söks i arbetsflöden matchar följande designerobjekt:
Egenskaper för Activity objekt, FlowNode objekt, State objekt, Transition objekt och andra anpassade flödeskontrollobjekt.
Variabler
Argument
Uttryck
Snabbsökning utförs i designerns ModelItem träd. Snabbsökning hittar inte namnområden som importerats i arbetsflödesdefinitionen.
Sök i filer
Nyckelord som söks i arbetsflöden matchar det faktiska innehållet i arbetsflödesfilerna. Sökresultaten visas i fönstret Sök resultat i Visual Studio. Om du dubbelklickar på resultatobjektet navigerar du till aktiviteten som innehåller matchningen i arbetsflödesdesignern.
Ta bort snabbmenyobjekt i variabel- och argumentdesignern
I .NET Framework 4 kunde variabler och argument bara tas bort i designern med hjälp av tangentbordet. Från och med .NET Framework 4.5 kan variabler och argument tas bort med snabbmenyn.
Följande skärmbild visar snabbmenyn för variabeln och argumentdesignern.
Omge automatiskt med sekvens
Eftersom ett arbetsflöde eller vissa containeraktiviteter (till exempel NoPersistScope) bara kan innehålla en enda brödtextaktivitet, krävde tillägg av en andra aktivitet att utvecklaren skulle ta bort den första aktiviteten, lägga till en Sequence aktivitet och sedan lägga till båda aktiviteterna i sekvensaktiviteten. Från och med .NET Framework 4.5 skapas en Sequence
aktivitet automatiskt för att omsluta båda aktiviteterna när du lägger till en andra aktivitet på designerytan.
Följande skärmbild visar en WriteLine
aktivitet i Body
i en NoPersistScope
.
Följande skärmbild visar den automatiskt skapade Sequence
aktiviteten när Body
en sekund WriteLine
släpps under den första.
Panoreringsläge
Om du vill navigera i ett stort arbetsflöde i designern enklare kan du aktivera panoreringsläget, så att utvecklaren kan klicka och dra för att flytta den synliga delen av arbetsflödet i stället för att behöva använda rullningslisterna. Knappen för att aktivera panoreringsläget finns i designerns nedre högra hörn.
Följande skärmbild visar panoreringsknappen som finns längst ned till höger i arbetsflödesdesignern.
Mellanmusknappen eller blankstegsfältet kan också användas för att panorera arbetsflödesdesignern.
Flera markeringar
Flera aktiviteter kan väljas samtidigt, antingen genom att dra en rektangel runt dem (när panoreringsläget inte är aktiverat) eller genom att hålla ned Ctrl och klicka på önskade aktiviteter en i taget.
Flera aktivitetsval kan också dras och tas bort i designern och kan också interageras med med snabbmenyn.
Dispositionsvy över arbetsflödesobjekt
För att göra hierarkiska arbetsflöden enklare att navigera i visas komponenter i ett arbetsflöde i en trädliknande dispositionsvy. Dispositionsvyn visas i vyn Dokumentdisposition . Om du vill öppna den här vyn går du till den översta menyn och väljer Visa, Andra Fönster, Dokumentdisposition eller trycker på Ctrl W,U. Om du klickar på en nod i dispositionsvyn navigerar du till motsvarande aktivitet i arbetsflödesdesignern och dispositionsvyn uppdateras för att visa aktiviteter som har valts i designern.
Följande skärmbild av det slutförda arbetsflödet från Komma igång Självstudie visar dispositionsvyn med ett sekventiellt arbetsflöde.
C#-uttryck
Före .NET Framework 4.5 kunde alla uttryck i arbetsflöden endast skrivas i Visual Basic. I .NET Framework 4.5 används Visual Basic-uttryck endast för projekt som skapats med Visual Basic. Visual C#-projekt använder nu C# för uttryck. En fullt fungerande C#-uttrycksredigerare tillhandahålls som funktioner som grammatikmarkering och intellisense. C#-arbetsflödesprojekt som skapats i tidigare versioner som använder Visual Basic-uttryck fortsätter att fungera.
C#-uttryck verifieras vid designtid. Fel i C#-uttryck markeras med en röd vågig understrykning.
Mer information om C#-uttryck finns i C#-uttryck.
Mer kontroll över synligheten för gränssnittsfält och rubrikobjekt
I en värdbaserad designer kanske vissa av standardgränssnittskontrollerna inte har någon betydelse för ett visst arbetsflöde och kan vara inaktiverade. I .NET Framework 4 stöds den här anpassningen endast av gränssnittsfältet längst ned i designern. I .NET Framework 4.5 kan synligheten för gränssnittshuvudobjekt överst i designern justeras genom att ange WorkflowShellHeaderItemsVisibility med lämpligt ShellHeaderItemsVisibility värde.
Ansluta automatiskt och infoga automatiskt i arbetsflöden för flödesschema och tillståndsdator
I .NET Framework 4 måste anslutningar mellan noder i ett flödesschemaarbetsflöde läggas till manuellt. I .NET Framework 4.5 har flödesschema- och tillståndsdatornoder automatiskt anslutna punkter som blir synliga när en aktivitet dras från verktygslådan till designerytan. Om du släpper en aktivitet på någon av dessa punkter läggs aktiviteten automatiskt till tillsammans med den nödvändiga anslutningen.
Följande skärmbild visar de bifogade filer som visas när en aktivitet dras från verktygslådan.
Aktiviteter kan också dras till anslutningar mellan flödesschemanoder och tillstånd för att automatiskt infoga noden mellan två andra noder. Följande skärmbild visar den markerade anslutningslinjen där aktiviteter kan dras från verktygslådan och tas bort.
Designeranteckningar
För att underlätta utvecklingen av större arbetsflöden har designern nu stöd för att lägga till anteckningar för att hålla reda på designprocessen. Anteckningar kan läggas till i aktiviteter, tillstånd, flödesschemanoder, variabler och argument. Följande skärmbild visar snabbmenyn som används för att lägga till anteckningar i designern.
Felsökningstillstånd
I .NET Framework 4 kunde icke-aktivitetselement inte stödja felsöknings brytpunkter eftersom de inte var körningsenheter. Den här versionen innehåller en mekanism för att lägga till brytpunkter i State objekt. När en brytpunkt anges för en Stateavbryts körningen när tillståndet övergår till innan dess inmatningsaktiviteter eller utlösare schemaläggs.
Definiera och använda ActivityDelegate-objekt i designern
Aktiviteter i .NET Framework 4 använda ActivityDelegate objekt för att exponera körningsplatser där andra delar av arbetsflödet kan interagera med ett arbetsflödes körning, men med dessa körningspunkter krävs vanligtvis en hel del kod. I den här versionen kan utvecklare definiera och använda aktivitetsombud med hjälp av arbetsflödesdesignern. Mer information finns i Så här: Definiera och använda aktivitetsdelegater i arbetsflödesdesignern.
Validering av byggtid
I .NET Framework 4 räknades inte arbetsflödesvalideringsfel som byggfel under bygget av ett arbetsflödesprojekt. Detta innebar att skapandet av ett arbetsflödesprojekt kunde lyckas även när det uppstod fel vid arbetsflödesvalidering. I .NET Framework 4.5 gör verifieringsfel för arbetsflödet att bygget misslyckas.
Designtidsbakgrundsvalidering
I .NET Framework 4 verifierades arbetsflöden som en förgrundsprocess, vilket potentiellt skulle kunna blockera användargränssnittet under komplexa eller tidskrävande valideringsprocesser. Arbetsflödesvalidering sker nu i en bakgrundstråd, så att användargränssnittet inte blockeras.
Visa tillstånd på en separat plats i XAML-filer
I .NET Framework 4 lagras visningstillståndsinformationen för ett arbetsflöde i XAML-filen på många olika platser. Det här är obekvämt för utvecklare som vill läsa XAML direkt eller skriva kod för att ta bort informationen om visningstillståndet. I .NET Framework 4.5 serialiseras visningstillståndsinformationen i XAML-filen som ett separat element i XAML-filen. Utvecklare kan enkelt hitta och redigera visningstillståndsinformation för en aktivitet eller ta bort visningstillståndet helt och hållet.
Utökningsbarhet för uttryck
I .NET Framework 4.5 tillhandahåller vi ett sätt för utvecklare att skapa egna uttrycks- och uttrycksredigeringsfunktioner som kan anslutas till arbetsflödesdesignern.
Anmäl dig till arbetsflöde 4.5-funktioner i designern med värd för nytt värd
För att bevara bakåtkompatibiliteten är vissa nya funktioner som ingår i .NET Framework 4.5 inte aktiverade som standard i den omvärdade designern. Detta är för att säkerställa att befintliga program som använder den omvärdade designern inte bryts genom att uppdatera till den senaste versionen. Om du vill aktivera nya funktioner i den omvärdade designern anger du TargetFrameworkName antingen ".NET Framework 4.5" eller anger enskilda medlemmar DesignerConfigurationService i för att aktivera enskilda funktioner.
Nya modeller för arbetsflödesutveckling
Förutom utvecklingsmodeller för flödesscheman och sekventiella arbetsflöden innehåller den här versionen tillståndsdatorarbetsflöden och kontrakt-första arbetsflödestjänster.
Tillståndsdatorarbetsflöden
Tillståndsmaskinarbetsflöden introducerades som en del av .NET Framework 4, version 4.0.1 i Microsoft .NET Framework 4 Platform Update 1. Den här uppdateringen innehöll flera nya klasser och aktiviteter som gjorde det möjligt för utvecklare att skapa tillståndsdatorarbetsflöden. Dessa klasser och aktiviteter har uppdaterats för .NET Framework 4.5. Uppdateringar inkluderar:
Möjligheten att ange brytpunkter för tillstånd
Möjligheten att kopiera och klistra in övergångar i arbetsflödesdesignern
Designerstöd för att skapa övergångsövergång för delade utlösare
Aktiviteter som används för att skapa tillståndsdatorarbetsflöden, inklusive: StateMachine, Stateoch Transition
Följande skärmbild visar arbetsflödet för den slutförda tillståndsdatorn från steget Komma igång Självstudie: Skapa ett tillståndsdatorarbetsflöde.
Mer information om hur du skapar tillståndsdatorarbetsflöden finns i Tillståndsdatorarbetsflöden.
Utveckling av kontrakt först-arbetsflöde
Med verktyget för utveckling av kontrakt först arbetsflöde kan utvecklaren utforma ett kontrakt i kod först och sedan, med några klickningar i Visual Studio, automatiskt generera en aktivitetsmall i verktygslådan som representerar varje åtgärd. Dessa aktiviteter används sedan för att skapa ett arbetsflöde som implementerar de åtgärder som definieras av kontraktet. Arbetsflödesdesignern validerar arbetsflödestjänsten för att säkerställa att dessa åtgärder implementeras och att arbetsflödets signatur matchar kontraktssignaturen. Utvecklaren kan också associera en arbetsflödestjänst med en samling implementerade kontrakt. Mer information om utveckling av kontrakt-första arbetsflödestjänst finns i How to: Create a workflow service that consumes an existing service contract (Så här skapar du en arbetsflödestjänst som använder ett befintligt tjänstkontrakt).