Dela via


Översikt över arbetsflödestjänster

Arbetsflödestjänster är WCF-baserade tjänster som implementeras med hjälp av arbetsflöden. Arbetsflödestjänster är arbetsflöden som använder meddelandeaktiviteterna för att skicka och ta emot WCF-meddelanden (Windows Communication Foundation). .NET Framework 4.5 introducerar ett antal meddelandeaktiviteter som gör att du kan skicka och ta emot meddelanden inifrån ett arbetsflöde. Mer information om meddelandeaktiviteter och hur de kan användas för att implementera olika mönster för meddelandeutbyte finns i Meddelandeaktiviteter.

Fördelar med att använda arbetsflödestjänster

I takt med att programmen blir alltmer distribuerade blir enskilda tjänster ansvariga för att anropa andra tjänster för att avlasta en del av arbetet. Implementering av dessa anrop som asynkrona åtgärder medför viss komplexitet i koden. Felhantering ger ytterligare komplexitet i form av hantering av undantag och detaljerad spårningsinformation. Vissa tjänster är ofta tidskrävande och kan ta upp värdefulla systemresurser i väntan på indata. På grund av dessa problem är distribuerade program ofta mycket komplexa och svåra att skriva och underhålla. Arbetsflöden är ett naturligt sätt att uttrycka samordningen av asynkront arbete, särskilt anrop till externa tjänster. Arbetsflöden är också effektiva för att representera långvariga affärsprocesser. Det är dessa egenskaper som gör arbetsflödet till en stor tillgång för att skapa tjänster i en distribuerad miljö.

Implementera en arbetsflödestjänst

När du implementerar en WCF-tjänst definierar du ett antal kontrakt som beskriver tjänsten och de data som den skickar och tar emot. Data representeras som datakontrakt och meddelandekontrakt. Både WCF- och arbetsflödestjänster använder definitioner av datakontrakt och meddelandekontrakt som en del av tjänstbeskrivningar. Själva tjänsten exponerar metadata (i form av WSDL) för att beskriva tjänstens åtgärder. I WCF definierar tjänstkontrakt och åtgärdskontrakt tjänsten och de åtgärder som den stöder. Men i en arbetsflödestjänst ingår dessa kontrakt i själva affärsprocessen. De exponeras i metadata av en process som kallas kontraktsinferens. När en arbetsflödestjänst hanteras med hjälp av WorkflowServiceHostgranskas arbetsflödesdefinitionen och ett kontrakt genereras baserat på den uppsättning meddelandeaktiviteter som finns i arbetsflödet. I synnerhet används följande aktiviteter och egenskaper för att generera kontraktet:

Receive Aktivitet

SendReply Aktivitet

TransactedReceiveScope Aktivitet

Slutresultatet av kontraktsinferens är en beskrivning av tjänsten med samma datastrukturer som WCF-tjänster och driftskontrakt. Den här informationen används sedan för att exponera WSDL för arbetsflödestjänsten.

Kommentar

.NET Framework 4.6.1 tillåter inte att du skriver arbetsflödestjänster med hjälp av en befintlig kontraktsdefinition utan ytterligare verktygsstöd. Arbetsflödestjänstkontrakt skapas av den kontraktsinferensprocess som beskrevs tidigare. Meddelandekontrakt och datakontrakt stöds dock fullt ut.

Arbetsflödestjänster och MSMQ-baserade bindningar

WCF definierar två MSMQ-baserade bindningar NetMsmqBinding och MsmqIntegrationBinding. MSMQ-baserade bindningar används ofta med arbetsflödestjänster på grund av sådana tjänsters långvariga karaktär. DE MSMQ-baserade bindningarna har en ValidityDuration egenskap som anger hur länge MSMQ-meddelanden kan antas vara giltiga. På grund av arbetsflödestjänsternas långvariga karaktär är det möjligt att varaktigheten för ett MSMQ-meddelande kan förflutit innan arbetsflödestjänsten kan bearbeta det. Det är därför mycket viktigt att ange giltighetstiden för en MSMQ-bindning till ett lämpligt värde. Det här värdet måste väljas baserat på arbetsflödet och hur det bearbetar meddelanden. Om du till exempel har ett arbetsflöde med en Receive aktivitet följt av en anpassad aktivitet som tar 10 minuter att köra, följt av en annan Receive aktivitet, skulle rätt värde för ValidityDuration vara större än 10 minuter.

Vara värd för en arbetsflödestjänst

Precis som WCF-tjänster måste arbetsflödestjänster finnas. WCF-tjänster använder ServiceHost klassen för att vara värd för tjänster och arbetsflödestjänster som används WorkflowServiceHost som värd för tjänster. Precis som WCF-tjänster kan arbetsflödestjänster hanteras på flera olika sätt, till exempel:

  • I ett hanterat .NET Framework-program.

  • I Internet Information Services (IIS).

  • I Windows Process Activation Service (WAS).

  • I en hanterad Windows-tjänst.

Arbetsflödestjänster som finns i ett hanterat .NET Framework-program eller en hanterad Windows-tjänst skapar en instans av WorkflowServiceHost klassen och skickar en instans av WorkflowService den som innehåller arbetsflödesdefinitionen Body i egenskapen. En arbetsflödesdefinition som innehåller meddelandeaktiviteter exponeras som en arbetsflödestjänst.

Om du vill vara värd för en arbetsflödestjänst i IIS eller WAS placerar du .xamlx-filen som innehåller arbetsflödestjänstdefinitionen i en virtuell katalog. En standardslutpunkt (med ) BasicHttpBindingskapas automatiskt Mer information finns i Förenklad konfiguration. Du kan också placera en Web.config-fil i den virtuella katalogen för att ange dina egna slutpunkter. Om arbetsflödesdefinitionen finns i en sammansättning kan du placera en .svc-fil i den virtuella katalogen och arbetsflödessammansättningen i katalogen App_Code. .svc-filen måste ange tjänstvärdfabriken och klassen som implementerar arbetsflödestjänsten. I följande exempel visas hur du anger tjänstvärdfabriken och anger vilken klass som implementerar arbetsflödestjänsten.

<%@ServiceHost Factory="System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory"
Service="EchoService"%>