Specifieke functies voor Windows Workflow Foundation
.NET Framework 4 voegt een aantal functies toe aan Windows Workflow Foundation. In dit document wordt een aantal nieuwe functies beschreven en worden de scenario's beschreven waarin ze nuttig kunnen zijn.
Berichtenactiviteiten
De berichtenactiviteiten (Receive, SendReply, Send, ) ReceiveReplyworden gebruikt om WCF-berichten van uw werkstroom te verzenden en te ontvangen. Receive en SendReply activiteiten worden gebruikt om een WCF-servicebewerking (Windows Communication Foundation) te vormen die beschikbaar wordt gesteld via WSDL, net zoals standaard WCF-webservices. Send en ReceiveReply worden gebruikt om een webservice te gebruiken die vergelijkbaar is met een WCF ChannelFactory; er bestaat ook een serviceverwijzingservaring toevoegen voor Workflow Foundation waarmee vooraf geconfigureerde activiteiten worden gegenereerd.
Aan de slag met berichtenactiviteiten
Maak in Visual Studio 2012 een WCF Workflow Service-toepassingsproject. Een Receive en SendReply paar worden op uw canvas geplaatst.
Klik met de rechtermuisknop op het project en selecteer Serviceverwijzing toevoegen. Wijs een bestaande webservice WSDL aan en klik op OK. Bouw uw project om de gegenereerde activiteiten weer te geven (geïmplementeerd met en Send ReceiveReply) in uw werkset.
Voorbeeldscenario berichtenactiviteiten
Een BestPriceFinder
service roept meerdere luchtvaartmaatschappijen aan om de beste ticketprijs voor een bepaalde route te vinden. Als u dit scenario implementeert, moet u de berichtactiviteiten gebruiken om de prijsaanvraag te ontvangen, de prijzen van de back-endservices op te halen en de prijsaanvraag met de beste prijs te beantwoorden. U moet ook andere kant-en-klare activiteiten gebruiken om de bedrijfslogica te maken voor het berekenen van de beste prijs.
WorkflowServiceHost
Dit WorkflowServiceHost is de out-of-box-werkstroomhost die ondersteuning biedt voor meerdere exemplaren, configuratie en WCF-berichten (hoewel de werkstromen geen berichten hoeven te gebruiken om te worden gehost). Het kan ook worden geïntegreerd met persistentie, tracering en exemplaarbeheer via een set servicegedrag. Net als WCF's ServiceHost, kan het WorkflowServiceHost zelf worden gehost in een console/WinForms/WPF-toepassing of Windows-service, of web-hosten (als een .xamlx-bestand) in IIS of WAS.
Aan de slag met werkstroomservicehost
Maak in Visual Studio 2010 een WCF Workflow Service Application-project: dit project wordt ingesteld voor gebruik WorkflowServiceHost in een webhostomgeving.
Als u een werkstroom voor niet-berichten wilt hosten, voegt u een aangepaste WorkflowHostingEndpoint werkstroom toe waarmee het exemplaar wordt gemaakt op basis van een bericht.
Werkstroomexemplaren kunnen worden beheerd (bijvoorbeeld onderbroken of beëindigd) door een WorkflowControlEndpoint toe te voegen aan de WorkflowServiceHost en vervolgens een WorkflowControlClient.
Voorbeelden voor de WorkflowServiceHost voorbeelden vindt u in de volgende secties:
Toepassing: Instantiebeheer onderbroken
WorkflowServiceHost-scenario
Een BestPriceFinder-service roept meerdere luchtvaartmaatschappijen aan om de beste ticketprijs voor een bepaalde route te vinden. Voor het implementeren van dit scenario moet u de werkstroom hosten in WorkflowServiceHost. Het zou ook de berichtactiviteiten gebruiken om de prijsaanvraag te ontvangen, de prijzen op te halen uit de back-endservices en de prijsaanvraag te beantwoorden met de beste prijs.
Correlatie
Een correlatie is een van de volgende twee dingen:
Een manier om berichten samen te groeperen; dat wil gezegd, de relatie tussen een aanvraagbericht en het bijbehorende antwoord.
Een manier om een stukje gegevens toe tewijsen aan een service-exemplaar
Aan de slag
Maak een nieuw project in Visual Studio om aan de slag te gaan met correlatie. Maak een variabele van het type CorrelationHandle.
Een voorbeeld van correlatie die wordt gebruikt om berichten te groeperen, is een aanvraag-antwoordcorrelatie die berichten groepeert.
Klik in een Receive activiteit op de CorrelationInitializers eigenschap en voeg een RequestReplyCorrelationInitializer eigenschap toe met behulp van correlationHandle die u in de eerste stap hierboven hebt gemaakt.
Maak een SendReply activiteit door met de rechtermuisknop op de Receive knop 'SendReply maken' te klikken. Plak deze in uw werkstroom na de Receive activiteit.
Een voorbeeld van het toewijzen van een stukje gegevens aan een service-exemplaar is een correlatie op basis van inhoud waarmee een stukje gegevens (bijvoorbeeld een order-id) wordt toegewezen aan een bepaald werkstroomexemplaren.
- Klik in een berichtenactiviteit op de
CorrelationInitializers
eigenschap en voeg een QueryCorrelationInitializer toe met behulp van de CorrelationHandle variabele die hierboven is gemaakt. Dubbelklik op de gewenste eigenschap in het bericht (bijvoorbeeld OrderID) in de vervolgkeuzelijst. Stel deCorrelatesWith
eigenschap in op de CorrelationHandle variabele die hierboven wordt gebruikt.
- Klik in een berichtenactiviteit op de
Correlatiescenario
Een werkstroom voor orderverwerking wordt gebruikt voor het afhandelen van het maken van nieuwe orders en het bijwerken van bestaande orders die in behandeling zijn. Voor het implementeren van dit scenario moet u de werkstroom WorkflowServiceHost hosten en de berichtenactiviteiten gebruiken. Er is ook correlatie vereist op basis van de orderId
om ervoor te zorgen dat er updates worden aangebracht in de juiste werkstroom.
Vereenvoudigde configuratie
Het WCF-configuratieschema is complex en biedt gebruikers veel moeilijk te vinden functies. In .NET Framework 4.6.1 hebben we ons gericht op het helpen van WCF-gebruikers bij het configureren van hun services met de volgende functies:
Het verwijderen van de noodzaak van expliciete configuratie per service. Als u geen <service-elementen> voor uw service configureert en uw service geen programmatisch eindpunt definieert, wordt er automatisch een set eindpunten toegevoegd aan uw service, één per basisadres en per contract dat door uw service wordt geïmplementeerd.
Hiermee kan de gebruiker standaardwaarden definiëren voor WCF-bindingen en -gedrag, die worden toegepast op services zonder expliciete configuratie.
Standaardeindpunten definiëren herbruikbare vooraf geconfigureerde eindpunten, die vaste waarden hebben voor een of meer eindpunteigenschappen (adres, binding en contract) en het definiëren van aangepaste eigenschappen toestaan.
Ten slotte ConfigurationChannelFactory<TChannel> kunt u centraal beheer van de WCF-clientconfiguratie uitvoeren, handig in scenario's waarin de configuratie wordt geselecteerd of gewijzigd na de laadtijd van het toepassingsdomein.
Aan de slag
Vereenvoudigde configuratiescenario's
Een ervaren ASMX-ontwikkelaar wil WCF gaan gebruiken. WCF lijkt echter veel te ingewikkeld! Wat is al die informatie die ik nodig heb om in een configuratiebestand te schrijven? In .NET 4 kunt u zelfs besluiten om helemaal geen configuratiebestand te hebben.
Een bestaande set WCF-services is zeer moeilijk te configureren en te onderhouden. Het configuratiebestand bevat duizenden regels XML-code die uiterst gevaarlijk zijn om aan te raken. Hulp is nodig om die hoeveelheid code te verminderen tot iets beter beheersbaars.
Gegevenscontract resolver
In .NET Framework 3.5 waren er enkele beperkingen in het ontwerp van bekende typen:
Het dynamisch toevoegen van bekende typen, tijdens serialisatie of deserialisatie, was niet mogelijk.
Serializers kunnen niet omgaan met onbekende xsi:type informatie.
Het was niet mogelijk voor gebruikers om op te geven welk xsi:type ze op de kabel willen hebben, bijvoorbeeld om de grootte van een serialisatie-exemplaar op de draad kleiner te maken.
De DataContractResolver lost deze problemen op in .NET Framework 4.5.
Aan de slag
Voorbeelden:
Scenario's voor gegevenscontract resolver
Vermijd het declareren van KnownTypeAttribute tientallen objecten in een service.
De grootte van de XML-blob verkleinen.
Stroomdiagram
Stroomdiagram is een bekend paradigma om domeinproblemen visueel weer te geven. Het is een nieuwe stijl voor de controlestroom die we introduceren in .NET Framework 4. Een kernkenmerk van stroomdiagram is dat slechts één activiteit op een bepaald moment wordt uitgevoerd. Stroomdiagrammen kunnen lussen en alternatieve resultaten uitdrukken, maar kunnen niet systeemeigen gelijktijdige uitvoering van meerdere knooppunten uitdrukken.
Aan de slag
Maak in Visual Studio 2012 een werkstroomconsoletoepassing. Voeg een stroomdiagram toe in de werkstroomontwerper.
De functie stroomdiagram maakt gebruik van de volgende klassen:
Voorbeelden:
Documentatie voor Designer:
Scenario's voor stroomdiagrammen
Een stroomdiagramactiviteit kan worden gebruikt om een gokspel te implementeren. Het gokspel is heel eenvoudig: de computer selecteert een willekeurig getal en de speler moet dat getal raden. Wanneer de speler elke schatting indient, toont de computer een hint (dat wil zeggen 'probeer een lager getal'). Als de speler het nummer vindt in minder dan 7 pogingen, ontvangen ze een speciale gefeliciteerd van de computer. Dit spel kan worden geïmplementeerd met een combinatie van de volgende procedurele activiteiten:
Procedurele activiteiten (reeks, If, ForEach, Switch, Assign, DoWhile, While)
Procedurele activiteiten bieden een mechanisme om de sequentiële controlestroom te modelleren met behulp van concepten die bekend zijn bij programmeurs. Deze activiteiten maken traditioneel gestructureerde programmeertaalconstructies mogelijk en bieden, indien van toepassing, taalpariteit met algemene procedurele talen, zoals C# en Visual Basic.
Aan de slag
Maak in Visual Studio 2012 een werkstroomconsoletoepassing. Voeg procedurele activiteiten toe in de werkstroomontwerper.
Voorbeelden:
Documentatie voor Designer:
Scenario's voor procedurele activiteit
Parallel: Een intranetdocumentbeheersysteem heeft een werkstroom voor documentgoedkeuring. Documenten moeten worden goedgekeurd door personen in verschillende afdelingen voordat ze op het intranet kunnen worden gepubliceerd. Er is geen vastgestelde volgorde voor de goedkeuringen; ze kunnen zich op elk gewenst moment voordoen terwijl het document zich in de fase Goedkeuring in behandeling bevindt. Wanneer een gebruiker een document ter controle indient, moet het worden goedgekeurd door de directe manager, de intranetbeheerder en de interne communicatiemanager.
ParallelForEach<T>: Een WF-toepassing beheert zakelijke aankopen binnen een groot bedrijf. De bedrijfsregels bepalen dat voordat u een aankoopbewerking plant, de waarderingen van drie verschillende leveranciers vereist zijn. Een werknemer van de inkoopafdeling selecteert drie leveranciers in de lijst met leveranciers van het bedrijf. Nadat deze leveranciers zijn geselecteerd en op de hoogte zijn gesteld, wacht het bedrijf op hun economische voorstellen. De voorstellen kunnen in elke volgorde komen. Om dit scenario in WF te implementeren, gebruiken we een ParallelForEach<T> scenario dat onze verzameling leveranciers doorloopt en om hun economische voorstellen vraagt. Nadat alle aanbiedingen zijn verzameld, wordt de beste geselecteerd en weergegeven.
InvokeMethod
Met de InvokeMethod activiteit kunnen openbare methoden worden aangeroepen in objecten of typen binnen het bereik. Het biedt ondersteuning voor het aanroepen van exemplaren en statische methoden met of zonder parameters (inclusief parametermatrices) en algemene methoden. Ook is het mogelijk om methode synchroon en asynchroon uit te voeren.
Aan de slag
Maak in Visual Studio 2012 een werkstroomconsoletoepassing. Voeg een InvokeMethod activiteit toe in de werkstroomontwerper en configureer er statische en exemplaarmethoden op.
Documentatie voor Designer: InvokeMethod Activity Designer
InvokeMethod-scenario's
Er moet een methode in een object in het bereik worden aangeroepen. Een waarde moet bijvoorbeeld worden toegevoegd aan een woordenlijst. De methode Toevoegen van het exemplaar van de woordenlijst wordt aangeroepen en de sleutel en waarde worden opgegeven.
Er moet een methode worden aangeroepen voor een verouderd CLR-object. In plaats van een aangepaste activiteit te maken om de aanroep naar die verouderde klasse te verpakken, kan deze worden gebruikt als deze binnen het bereik valt tijdens de uitvoering InvokeMethod van de werkstroom.
Foutafhandelingsactiviteiten
De TryCatch activiteit biedt een mechanisme voor het vangen van uitzonderingen die optreden tijdens de uitvoering van een set ingesloten activiteiten (vergelijkbaar met de Try/Catch-constructie in C# en Visual Basic). TryCatch biedt uitzonderingsafhandeling op werkstroomniveau. Wanneer er een niet-verwerkte uitzondering wordt gegenereerd, wordt de werkstroom afgebroken en wordt het laatste blok niet uitgevoerd. Dit gedrag is consistent met C#.
Aan de slag
Maak in Visual Studio 2012 een werkstroomconsoletoepassing. Voeg een TryCatch activiteit toe in de werkstroomontwerper.
Voorbeeld: Foutafhandeling in een stroomdiagramactiviteit met TryCatch
Documentatie voor designer: ontwerpers van foutafhandelingsactiviteiten
Scenario's voor foutafhandeling
Er moet een reeks activiteiten worden uitgevoerd en er moet specifieke logica worden uitgevoerd wanneer er een fout optreedt. Als tijdens deze foutafhandelingslogica wordt vastgesteld dat de fout niet kan worden hersteld, wordt de uitzondering opnieuw uitgevoerd en treedt de bovenliggende activiteit (of de host) op met het probleem.
Activiteit kiezen
De Pick activiteit biedt controlestroommodellering op basis van gebeurtenissen in WF. Pick bevat veel vertakkingen waarbij elke vertakking wacht tot een bepaalde gebeurtenis plaatsvindt voordat deze wordt uitgevoerd. In deze installatie gedraagt een Pick gedrag dat vergelijkbaar is met een Switch<T> activiteit waarop slechts één van de reeks gebeurtenissen wordt uitgevoerd die wordt geluisterd. Elke vertakking is gebeurtenisgestuurd en de gebeurtenis die optreedt, voert eerst de bijbehorende vertakking uit. Alle andere vertakkingen annuleren en stoppen met luisteren naar gebeurtenissen.
Aan de slag
Maak in Visual Studio 2012 een werkstroomconsoletoepassing. Voeg een Pick activiteit toe in de werkstroomontwerper.
Voorbeeld: De pick-activiteit gebruiken
Documentatie voor designer: Activiteitsontwerper kiezen
Scenario kiezen
Een gebruiker moet om invoer worden gevraagd. In normale omstandigheden zou de ontwikkelaar een methodeaanroep ReadLine gebruiken om te vragen om invoer van een gebruiker. Het probleem met deze installatie is dat het programma wacht totdat de gebruiker iets invoert. In dit scenario is een time-out nodig om een blokkeringsactiviteit op te heffen. Een veelvoorkomend scenario is een scenario waarbij een taak binnen een bepaalde tijdsduur moet worden voltooid. Time-out van een blokkerende activiteit is een scenario waarbij Pick veel waarde toevoegt.
WCF-routeringsservice
De Routeringsservice is ontworpen als een algemene softwarerouter waarmee u kunt bepalen hoe WCF-berichten tussen uw clients en services stromen. Met de routeringsservice kunt u uw clients loskoppelen van uw services, waardoor u veel meer vrijheid hebt in termen van de configuraties die u kunt ondersteunen en de flexibiliteit die u hebt bij het hosten van uw services. In .NET Framework 3.5 waren clients en services nauw gekoppeld; een klant moest weten over alle services waar hij mee moest praten en waar ze zich bevonden. Daarnaast had WCF in .NET Framework 3.5 de volgende beperkingen:
Foutafhandeling was complex, omdat deze logica in de client moest worden vastgelegd.
Clients en services moesten altijd dezelfde bindingen gebruiken.
Services waren zelden goed gefactoreerd: het is eenvoudiger om de client te laten communiceren met één service die alles implementeert, in plaats van te kiezen tussen meerdere services.
De routeringsservice in .NET 4 is ontworpen om deze problemen gemakkelijker op te lossen. De nieuwe routeringsservice heeft de volgende functies:
Routering op basis van inhoud (MessageFilter objecten onderzoeken een bericht om te bepalen waar het moet worden verzonden.)
Protocol bridging (transport & message)
Foutafhandeling (de router onderschept communicatie-uitzonderingen en voert een failover uit naar back-upeindpunten)
Dynamische update (in het geheugen) van MessageFilterTable<TFilterData> en routeringsconfiguratie.
Aan de slag
Documentatie: Routering
Voorbeelden: Routeringsservices [WCF-voorbeelden]
Blog: Regels voor doorsturen!
Routeringsscenario's
De routeringsservice is handig in de volgende scenario's:
Clients kunnen met meerdere services praten zonder dat ze allemaal rechtstreeks hoeven te worden aangepakt.
Clients kunnen aanvullende logica uitvoeren op een clientaanvraag om te bepalen waar deze moet worden gerouteerd
Ontleden van de bewerkingen die een client uitvoert in meerdere service-implementaties zonder de client te herstructureren.
Clients en services kunnen verschillende bindingen spreken met verschillende beveiligingsinstellingen.
Clients kunnen worden ingeschakeld om robuuster te zijn tegen fouten of de onbeschikbaarheid van services.
WCF-detectie
WCF Discovery is een frameworktechnologie waarmee u een detectiemechanisme kunt opnemen in uw toepassingsinfrastructuur. U kunt dit gebruiken om uw service detecteerbaar te maken en uw clients te configureren voor het zoeken naar services. Clients hoeven niet langer in code te worden vastgelegd met eindpunt, waardoor uw toepassing robuuster en fouttoleranter wordt. Detectie is het perfecte platform voor het bouwen van mogelijkheden voor automatische configuratie in uw toepassing.
Het product is gebouwd op basis van de WS-Discovery-standaard. Het is ontworpen om interoperabel, uitbreidbaar en algemeen te zijn. Het product ondersteunt twee bewerkingsmodi:
Beheerd: wanneer er een entiteit op het netwerk aanwezig is die op de hoogte is van bestaande services, vragen clients deze rechtstreeks om informatie. Dit is vergelijkbaar met Active Directory.
Ad-hoc: waarbij clients multicast-berichten gebruiken om services te vinden.
Bovendien zijn detectieberichten agnostisch netwerkprotocol; u kunt ze bovenop elk protocol gebruiken dat ondersteuning biedt voor de modusvereisten. Detectie-multicastberichten kunnen bijvoorbeeld worden verzonden via het UDP-kanaal of een ander netwerk dat ondersteuning biedt voor multicast-berichten. Deze ontwerppunten, gecombineerd met flexibiliteit van functies, bieden u de mogelijkheid om de detectie specifiek aan uw oplossing aan te passen.
Aan de slag
Documentatie: WCF Discovery
Voorbeelden: Detectie (voorbeelden)
Detectiescenario's
Een ontwikkelaar wil geen eindpunten voor vaste code, omdat deze onbekend is wanneer mijn service beschikbaar is. In plaats daarvan wil de ontwikkelaar tijdens runtime een service kiezen. Er is meer ontkoppeling, robuustheid en automatische configuratie nodig tussen de onderdelen in de toepassing.
Bijhouden
Werkstroomtracking biedt inzicht in de uitvoering van een werkstroomexemplaren. De tracking-gebeurtenissen worden verzonden vanuit een werkstroom op het niveau van het werkstroomexemplaren en wanneer activiteiten binnen de werkstroom worden uitgevoerd. Een deelnemer aan het bijhouden van werkstromen moet worden toegevoegd aan de werkstroomhost om u te abonneren op traceringsrecords. De traceringsrecords worden gefilterd met behulp van een traceringsprofiel. Het .NET Framework biedt een ETW-traceringsdeelnemer (Event Tracing for Windows) en er wordt een basisprofiel geïnstalleerd in het bestand machine.config.
Aan de slag
Maak in Visual Studio 2010 een WCF Workflow Service Application-project. Een Receive en SendReply paar worden op uw canvas geplaatst om te beginnen.
Open de web.config en voeg een ETW-traceringsgedrag toe zonder profiel.
Het standaardprofiel wordt gebruikt.
Open logboeken en schakel het analysekanaal in het volgende knooppunt in: Logboeken, Logboeken toepassingen en services, Microsoft, Windows, Application Server-Applications. Klik met de rechtermuisknop op Analyse en selecteer Logboek inschakelen.
Voer de werkstroomservice uit.
Bekijk de gebeurtenissen voor het bijhouden van werkstromen in logboeken.
Voorbeelden: Bijhouden
Conceptuele documentatie: Werkstroom bijhouden en traceren
SQL Workflow Instance Store
Dit SqlWorkflowInstanceStore is een sql Server-implementatie van een exemplaararchief. In een exemplaararchief wordt de status van een actief exemplaar opgeslagen, samen met alle gegevens die nodig zijn om die instantie te laden en te hervatten. De servicehost instrueert het exemplaararchief om de exemplaarstatus op te slaan als de werkstroom zich blijft voordoen en geeft aan het exemplaararchief de status van het exemplaar te laden wanneer een bericht voor dat exemplaar binnenkomt of dat een vertragingsactiviteit verloopt.
Aan de slag
Maak in Visual Studio 2012 een werkstroom die een impliciete of expliciete Persist activiteit bevat. Voeg het gedrag toe aan uw SqlWorkflowInstanceStore werkstroomservicehost. Dit kan worden gedaan in code of in het toepassingsconfiguratiebestand.
Voorbeelden: Persistentie
Conceptuele documentatie: SQL Workflow Instance Store.