Share via


Wat is er nieuw in Windows Workflow Foundation in .NET Framework 4.5

Windows Workflow Foundation (WF) in .NET Framework 4.5 introduceert veel nieuwe functies, zoals nieuwe activiteiten, ontwerpmogelijkheden en werkstroomontwikkelingsmodellen. Veel, maar niet alle, nieuwe werkstroomfuncties die zijn geïntroduceerd in .NET Framework 4.5, worden ondersteund in de opnieuw gehoste werkstroomontwerper. Zie Support for New Workflow Foundation 4.5 Features in the Rehosted Workflow Designer (Ondersteuning voor nieuwe workflow foundation 4.5-functies) voor meer informatie over de nieuwe functies die worden ondersteund. Zie Migratierichtlijnen voor meer informatie over het migreren van .NET Framework 3.0- en .NET Framework 3.5-werkstroomtoepassingen voor het gebruik van de nieuwste versie. Dit artikel bevat een overzicht van de nieuwe werkstroomfuncties die zijn geïntroduceerd in .NET Framework 4.5.

Waarschuwing

De nieuwe functies van Windows Workflow Foundation die zijn geïntroduceerd in .NET Framework 4.5, zijn niet beschikbaar voor projecten die zijn gericht op eerdere versies van het framework. Als een project dat is gericht op .NET Framework 4.5 opnieuw wordt gericht op een eerdere versie van het framework, kunnen er verschillende problemen optreden.

  • C#-expressies worden in de ontwerpfunctie vervangen door het bericht Waarde is ingesteld in XAML.
  • Er treden veel buildfouten op, waaronder de volgende fout.

De bestandsindeling is niet compatibel met het huidige doelframework. Als u de bestandsindeling wilt converteren, moet u het bestand expliciet opslaan. Dit foutbericht verdwijnt nadat u het bestand hebt opgeslagen en de ontwerpfunctie opnieuw hebt geopend.

Werkstroomversiebeheer

.NET Framework 4.5 heeft verschillende nieuwe versiefuncties geïntroduceerd op basis van de nieuwe WorkflowIdentity klasse. WorkflowIdentity biedt auteurs van werkstroomtoepassingen een mechanisme voor het toewijzen van een persistent werkstroomexemplaar aan de bijbehorende definitie.

Activiteiten

De ingebouwde activiteitenbibliotheek bevat nieuwe activiteiten en nieuwe functies voor bestaande activiteiten.

NoPersist-bereik

NoPersistScope is een nieuwe containeractiviteit die voorkomt dat een werkstroom wordt behouden wanneer de onderliggende activiteiten van NoPersistScope worden uitgevoerd. Dit is handig in scenario's waarin het niet geschikt is om de werkstroom te behouden, bijvoorbeeld wanneer de werkstroom machinespecifieke resources gebruikt, zoals bestandsingangen, of tijdens databasetransacties. Voorheen was een aangepaste NativeActivity die gebruikmaakt van een NoPersistHandle a vereist om persistentie te voorkomen tijdens de uitvoering van een activiteit.

Nieuwe mogelijkheden voor stroomdiagrammen

Stroomdiagrammen worden bijgewerkt voor .NET Framework 4.5 en hebben de volgende nieuwe mogelijkheden:

  • De DisplayName eigenschap van een FlowSwitch<T> of-activiteit FlowDecision kan worden bewerkt. Hierdoor kan de activiteitontwerper meer informatie weergeven over het doel van de activiteit.

  • Stroomdiagrammen hebben een nieuwe eigenschap met de naam ValidateUnconnectedNodes; de standaardwaarde voor deze eigenschap is False. Als deze eigenschap is ingesteld op True, veroorzaken niet-verbonden stroomdiagramknooppunten validatiefouten.

Ondersteuning voor gedeeltelijk vertrouwen

Voor werkstromen in .NET Framework 4 is een volledig vertrouwd toepassingsdomein vereist. In .NET Framework 4.5 kunnen werkstromen worden uitgevoerd in een gedeeltelijke vertrouwensomgeving. In een gedeeltelijke vertrouwensomgeving kunnen onderdelen van derden worden gebruikt zonder dat ze volledige toegang krijgen tot de resources van de host. Enkele zorgen over het uitvoeren van werkstromen in gedeeltelijk vertrouwen zijn:

  1. Het gebruik van verouderde onderdelen (inclusief regels) in de Interop activiteit wordt niet ondersteund onder gedeeltelijke vertrouwensrelatie.

  2. Het uitvoeren van werkstromen in gedeeltelijk vertrouwen in WorkflowServiceHost wordt niet ondersteund.

  3. Persistente uitzonderingen in een gedeeltelijk vertrouwensscenario is een potentiële beveiligingsrisico. Als u het persistent maken van uitzonderingen wilt uitschakelen, moet een extensie van het type ExceptionPersistenceExtension worden toegevoegd aan het project om permanente uitzonderingen uit te schakelen. In het volgende codevoorbeeld ziet u hoe u dit type implementeert.

    public class ExceptionPersistenceExtension
    {
        public ExceptionPersistenceExtension()
        {
            this.PersistExceptions = false;
        }
        public bool PersistExceptions { get; set; }
    }
    

    Als uitzonderingen niet moeten worden geserialiseerd, moet u ervoor zorgen dat uitzonderingen worden gebruikt binnen een NoPersistScope.

  4. Auteurs van activiteiten moeten overschrijven CacheMetadata om te voorkomen dat de werkstroomruntime automatisch reflectie uitvoert op basis van het type. Argumenten en onderliggende activiteiten moeten niet null zijn en Bind moeten expliciet worden aangeroepen. Zie Gegevens beschikbaar maken met CacheMetadata voor meer informatie over het overschrijvenCacheMetadata. Ook moeten exemplaren van argumenten die van een type zijn dat is internal of privé zijn, expliciet worden gemaakt in CacheMetadata om te voorkomen dat ze worden gemaakt door reflectie.

  5. Typen gebruiken ISerializable of SerializableAttribute niet voor serialisatie; typen die moeten worden geserialiseerd, moeten ondersteunen DataContractSerializer.

  6. Expressies die gebruikmaken van LambdaValue<TResult> , zijn vereist RestrictedMemberAccessen werken dus niet onder gedeeltelijk vertrouwen. Werkstromen die gebruikmaken LambdaValue<TResult> van moeten deze expressies vervangen door activiteiten die zijn afgeleid van CodeActivity<TResult>. .

  7. Expressies kunnen niet worden gecompileerd met of TextExpressionCompiler de door Visual Basic gehoste compiler in gedeeltelijk vertrouwen, maar eerder gecompileerde expressies kunnen wel worden uitgevoerd.

  8. Eén assembly die gebruikmaakt van transparantieniveau 2 kan niet worden gebruikt in .NET Framework 4, .NET Framework 4.6.1 in volledig vertrouwen en .NET Framework 4.6.1 in gedeeltelijk vertrouwen.

Nieuwe designermogelijkheden

Zoeken in designer

Om grotere werkstromen beter beheersbaar te maken, kunnen werkstromen nu worden doorzocht op trefwoord. Deze functie is alleen beschikbaar in Visual Studio; deze functie is niet beschikbaar in een opnieuw gehoste ontwerper. Er zijn twee soorten zoekopdrachten beschikbaar:

  • Snel zoeken, gestart met Ctrl+F of Bewerken, Zoeken en vervangen, Snel zoeken.

  • Zoeken in Bestanden, gestart met Ctrl+Shift+F of Bewerken, Zoeken en vervangen, Zoeken in bestanden.

Vervangen wordt niet ondersteund.

Snel zoeken

Trefwoorden die in werkstromen worden doorzocht, komen overeen met de volgende ontwerpitems:

  • Eigenschappen van Activity objecten, FlowNode objecten, State objecten, Transition objecten en andere aangepaste items voor stroombeheer.

  • Variabelen

  • Argumenten

  • Expressies

Snel zoeken wordt uitgevoerd op de structuur van ModelItem de ontwerper. Met Snel zoeken worden geen naamruimten gevonden die zijn geïmporteerd in de werkstroomdefinitie.

Zoeken in bestanden

Trefwoorden die in werkstromen worden doorzocht, komen overeen met de werkelijke inhoud van de werkstroombestanden. De zoekresultaten worden weergegeven in het weergavevenster Resultaten zoeken in Visual Studio. Dubbelklik op het resultaatitem om naar de activiteit te gaan die de overeenkomst in workflowontwerper bevat.

Contextmenu-item verwijderen in de ontwerpfunctie voor variabelen en argumenten

In .NET Framework 4 konden variabelen en argumenten alleen worden verwijderd in de ontwerpfunctie met behulp van het toetsenbord. Vanaf .NET Framework 4.5 kunnen variabelen en argumenten worden verwijderd via het contextmenu.

In de volgende schermopname ziet u het contextmenu van de variabele en argumentontwerper.

Contextmenu variabele en argumentontwerper

Automatisch omsluiten met volgorde

Aangezien een werkstroom of bepaalde containeractiviteiten (zoals NoPersistScope) slechts één hoofdtekstactiviteit kunnen bevatten, moest de ontwikkelaar voor het toevoegen van een tweede activiteit de eerste activiteit verwijderen, een Sequence activiteit toevoegen en vervolgens beide activiteiten toevoegen aan de reeksactiviteit. Vanaf .NET Framework 4.5 wordt bij het toevoegen van een tweede activiteit aan het ontwerpoppervlak automatisch een Sequence activiteit gemaakt om beide activiteiten te verpakken.

In de volgende schermopname ziet u een WriteLine activiteit in de Body van een NoPersistScope.

Een WriteLine-activiteit in de hoofdtekst van een NoPersistScope-activiteit.

In de volgende schermopname ziet u de automatisch gemaakte Sequence activiteit in de Body wanneer een seconde WriteLine onder de eerste wordt neergezet.

Een automatisch gemaakte reeks in de hoofdtekst van een NoPersistScope.

Panmodus

Als u gemakkelijker wilt navigeren in een grote werkstroom in de ontwerpfunctie, kan de panmodus worden ingeschakeld, zodat de ontwikkelaar kan klikken en slepen om het zichtbare gedeelte van de werkstroom te verplaatsen, in plaats van de schuifbalken te hoeven gebruiken. De knop voor het activeren van de panmodus bevindt zich in de rechterbenedenhoek van de ontwerpfunctie.

In de volgende schermopname ziet u de knop Pannen in de rechterbenedenhoek van de werkstroomontwerper.

De knop Pannen is gemarkeerd in de werkstroomontwerper.

De middelste muisknop of spatiebalk kan ook worden gebruikt om de werkstroomontwerper te pannen.

Meervoudige selectie

U kunt meerdere activiteiten tegelijk selecteren door er een rechthoek omheen te slepen (wanneer de panmodus niet is ingeschakeld), of door Ctrl ingedrukt te houden en één voor één op de gewenste activiteiten te klikken.

Selecties van meerdere activiteiten kunnen ook worden gesleept en neergezet in de ontwerpfunctie en kunnen ook worden gebruikt via het contextmenu.

Overzichtsweergave van werkstroomitems

Om het navigeren in hiërarchische werkstromen gemakkelijker te maken, worden onderdelen van een werkstroom weergegeven in een overzichtsweergave in structuurstijl. De overzichtsweergave wordt weergegeven in de weergave Documentoverzicht . Als u deze weergave wilt openen, selecteert u in het bovenste menu Beeld, Andere vensters, Documentoverzicht of drukt u op Ctrl W,U. Als u op een knooppunt in de overzichtsweergave klikt, gaat u naar de bijbehorende activiteit in de werkstroomontwerper. De overzichtsweergave wordt bijgewerkt om activiteiten weer te geven die zijn geselecteerd in de ontwerpfunctie.

In de volgende schermopname van de voltooide werkstroom uit de zelfstudie Aan de slag ziet u de overzichtsweergave met een sequentiële werkstroom.

Schermopname van de overzichtsweergave met een sequentiële werkstroom in Visual Studio.

C#-expressies

Vóór .NET Framework 4.5 konden alle expressies in werkstromen alleen worden geschreven in Visual Basic. In .NET Framework 4.5 worden Visual Basic-expressies alleen gebruikt voor projecten die zijn gemaakt met Visual Basic. Visual C#-projecten gebruiken nu C# voor expressies. Er is een volledig functionele C#-expressie-editor beschikbaar die mogelijkheden biedt, zoals grammaticamarkering en intelliSense. C#-werkstroomprojecten die zijn gemaakt in eerdere versies en gebruikmaken van Visual Basic-expressies, blijven werken.

C#-expressies worden tijdens het ontwerp gevalideerd. Fouten in C#-expressies worden gemarkeerd met een rode golvende onderstreping.

Zie C#-expressies voor meer informatie over C#-expressies.

Meer controle over de zichtbaarheid van shellbalk- en koptekstitems

In een opnieuw gehoste ontwerpfunctie hebben sommige standaardbesturingselementen van de gebruikersinterface mogelijk geen betekenis voor een bepaalde werkstroom en kunnen ze worden uitgeschakeld. In .NET Framework 4 wordt deze aanpassing alleen ondersteund door de shellbalk onder aan de ontwerpfunctie. In .NET Framework 4.5 kan de zichtbaarheid van shellheaderitems bovenaan de ontwerpfunctie worden aangepast door de juiste waarde in te ShellHeaderItemsVisibility stellenWorkflowShellHeaderItemsVisibility.

Automatisch verbinding maken en automatisch invoegen in werkstromen Stroomdiagram en Statusmachine

In .NET Framework 4 moesten verbindingen tussen knooppunten in een stroomdiagramwerkstroom handmatig worden toegevoegd. In .NET Framework 4.5 hebben de knooppunten Stroomdiagram en Statusmachine automatische verbindingspunten die zichtbaar worden wanneer een activiteit van de werkset naar het ontwerpoppervlak wordt gesleept. Als u een activiteit op een van deze punten neerhaakt, wordt de activiteit automatisch samen met de benodigde verbinding toegevoegd.

In de volgende schermopname ziet u de bijlagepunten die zichtbaar worden wanneer een activiteit uit de werkset wordt gesleept.

Beginknooppunt van stroomdiagram met punten voor automatisch verbinden

Activiteiten kunnen ook worden gesleept naar verbindingen tussen stroomdiagramknooppunten en statussen om het knooppunt automatisch tussen twee andere knooppunten in te voegen. In de volgende schermopname ziet u de gemarkeerde verbindingslijn waar activiteiten uit de werkset kunnen worden gesleept en verwijderd.

Greep automatisch invoegen voor het verwijderen van activiteiten

Aantekeningen in ontwerpfunctie

Om het ontwikkelen van grotere werkstromen te vergemakkelijken, ondersteunt de ontwerper nu het toevoegen van aantekeningen om het ontwerpproces bij te houden. Aantekeningen kunnen worden toegevoegd aan activiteiten, statussen, stroomdiagramknooppunten, variabelen en argumenten. In de volgende schermopname ziet u het contextmenu dat wordt gebruikt om aantekeningen toe te voegen aan de ontwerpfunctie.

Schermopname van een menu voor het toevoegen van aantekeningen.

Foutopsporingsstatussen

In .NET Framework 4 konden niet-activiteitselementen geen ondersteuning bieden voor onderbrekingspunten voor foutopsporing, omdat het geen uitvoeringseenheden waren. Deze release biedt een mechanisme voor het toevoegen van onderbrekingspunten aan State objecten. Wanneer een onderbrekingspunt is ingesteld op een State, wordt de uitvoering onderbroken wanneer de status wordt overgezet naar, voordat de invoeractiviteiten of triggers worden gepland.

ActivityDelegate-objecten definiëren en gebruiken in de ontwerpfunctie

Activiteiten in .NET Framework 4 gebruikten ActivityDelegate objecten om uitvoeringspunten beschikbaar te maken waar andere onderdelen van de werkstroom kunnen communiceren met de uitvoering van een werkstroom, maar voor het gebruik van deze uitvoeringspunten was meestal een behoorlijke hoeveelheid code vereist. In deze release kunnen ontwikkelaars gedelegeerden voor activiteiten definiëren en gebruiken met behulp van de werkstroomontwerper. Zie How to: Define and consume activity delegates in the Workflow Designer (Procedure: gedelegeerden voor activiteiten definiëren en gebruiken in de werkstroomontwerper) voor meer informatie.

Validatie van buildtijd

In .NET Framework 4 werden werkstroomvalidatiefouten niet geteld als buildfouten tijdens het bouwen van een werkstroomproject. Dit betekende dat het bouwen van een werkstroomproject kon lukken, zelfs wanneer er werkstroomvalidatiefouten waren. In .NET Framework 4.5 zorgen werkstroomvalidatiefouten ervoor dat de build mislukt.

Achtergrondvalidatie voor ontwerptijd

In .NET Framework 4 zijn werkstromen gevalideerd als een voorgrondproces, waardoor de gebruikersinterface mogelijk wordt geblokkeerd tijdens complexe of tijdrovende validatieprocessen. Werkstroomvalidatie vindt nu plaats op een achtergrondthread, zodat de gebruikersinterface niet wordt geblokkeerd.

Status weergeven op een afzonderlijke locatie in XAML-bestanden

In .NET Framework 4 worden de weergavestatusgegevens voor een werkstroom in het XAML-bestand op veel verschillende locaties opgeslagen. Dit is lastig voor ontwikkelaars die XAML rechtstreeks willen lezen of code willen schrijven om de statusgegevens van de weergave te verwijderen. In .NET Framework 4.5 wordt de informatie over de weergavestatus in het XAML-bestand geserialiseerd als een afzonderlijk element in het XAML-bestand. Ontwikkelaars kunnen de weergavestatusgegevens van een activiteit eenvoudig vinden en bewerken, of de weergavestatus helemaal verwijderen.

Expressie-uitbreidbaarheid

In .NET Framework 4.5 bieden we ontwikkelaars een manier om hun eigen ervaring voor het ontwerpen van expressies en expressies te maken die kunnen worden aangesloten op de werkstroomontwerper.

Aanmelden voor Workflow 4.5-functies in opnieuw gehoste designer

Om compatibiliteit met eerdere versies te behouden, zijn sommige nieuwe functies in .NET Framework 4.5 standaard niet ingeschakeld in de opnieuw gehoste ontwerpfunctie. Dit is om ervoor te zorgen dat bestaande toepassingen die gebruikmaken van de opnieuw gehoste designer niet worden verbroken door bij te werken naar de nieuwste versie. Als u nieuwe functies wilt inschakelen in de opnieuw gehoste ontwerpfunctie, stelt u in TargetFrameworkName op '.NET Framework 4.5' of stelt u afzonderlijke leden van DesignerConfigurationService in om afzonderlijke functies in te schakelen.

Nieuwe werkstroomontwikkelingsmodellen

Naast stroomdiagram- en sequentiële werkstroomontwikkelingsmodellen bevat deze release State Machine-werkstromen en contract-first-werkstroomservices.

Werkstromen voor statuscomputers

Werkstromen voor statuscomputers zijn geïntroduceerd als onderdeel van de .NET Framework 4, versie 4.0.1 in de Microsoft .NET Framework 4 Platform Update 1. Deze update bevatte verschillende nieuwe klassen en activiteiten waarmee ontwikkelaars werkstromen voor statuscomputers konden maken. Deze klassen en activiteiten zijn bijgewerkt voor .NET Framework 4.5. De updates omvatten:

  1. De mogelijkheid om onderbrekingspunten in te stellen voor statussen

  2. De mogelijkheid om overgangen te kopiëren en plakken in de werkstroomontwerper

  3. Designer-ondersteuning voor het maken van een gedeelde triggerovergang

  4. Activiteiten die worden gebruikt voor het maken van State Machine-werkstromen, waaronder: StateMachine, Stateen Transition

In de volgende schermopname ziet u de voltooide werkstroom van de statusmachine uit de Aan de slag ZelfstudiestapProcedure: Een werkstroom voor een statusmachine maken.

Afbeelding van de voltooide werkstroom van de statusmachine.

Zie Werkstromen voor statuscomputers voor meer informatie over het maken van werkstromen voor statuscomputers.

Werkstroomontwikkeling contract-first

Met het hulpprogramma voor het ontwikkelen van de werkstroom contract-first kan de ontwikkelaar eerst een contract in code ontwerpen en vervolgens met een paar klikken in Visual Studio automatisch een activiteitssjabloon genereren in de werkset die elke bewerking vertegenwoordigt. Deze activiteiten worden vervolgens gebruikt om een werkstroom te maken waarmee de bewerkingen worden geïmplementeerd die in het contract zijn gedefinieerd. De werkstroomontwerper valideert de werkstroomservice om ervoor te zorgen dat deze bewerkingen worden geïmplementeerd en dat de handtekening van de werkstroom overeenkomt met de contracthandtekening. De ontwikkelaar kan ook een werkstroomservice koppelen aan een verzameling geïmplementeerde contracten. Zie How to: Create a workflow service that consumes an existing service (Een werkstroomservice maken die een bestaand servicecontract gebruikt) voor meer informatie over het ontwikkelen van een werkstroomservice waarbij een contract wordt uitgevoerd.