Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
.NET Framework 4.6.1 tillhandahåller WorkflowServiceHost klassen för att vara värd för arbetsflödestjänster. Den här klassen används när du själv är värd för en arbetsflödestjänst i ett hanterat program eller en Windows-tjänst. Den här klassen används också när du är värd för en arbetsflödestjänst med IIS (Internet Information Services) eller Windows Process Activation Service (WAS). Klassen WorkflowServiceHost innehåller tilläggspunkter som gör att du kan lägga till anpassade tillägg, ändra inaktivitetsbeteendet och vara värd för arbetsflöden som inte är tjänstarbetsflöden (arbetsflöden som inte använder meddelandeaktiviteter).
Tillägg för Värdtjänst för Arbetsflöde
WorkflowServiceHost innehåller en WorkflowExtensions-egenskap av typen WorkflowInstanceExtensionManager som tillhandahåller metoder för att lägga till tillägg i WorkflowServiceHost. Använd metoden Add för att lägga till ett tillägg för varje arbetsflödestjänstinstans. Det angivna ombudet anropas för att skapa ett nytt tillägg när en arbetsflödestjänstinstans skapas eller läses in från ett beständigt lager. Använd Add-metoden för att lägga till ett tillägg för varje arbetsflödestjänstvärd. En instans av tillägget delas mellan alla arbetsflödestjänstinstanser.
Reagera på ohanterade undantag
Med WorkflowUnhandledExceptionBehavior kan du ange vilken åtgärd som ska tas om ett ohanterat undantag inträffar i en arbetsflödestjänst. Egenskapen Action anger ett av WorkflowUnhandledExceptionAction värdena:
Abandon – Avbryter arbetsflödestjänstinstansen.
AbandonAndSuspend – Återställer till det senast bevarade tillståndet och inaktiverar arbetsflödestjänstinstansen. Detta sker endast om arbetsflödet redan har beständiggjorts minst en gång. Om inte det görs så avbryts arbetsflödesinstansen.
Cancel – Avbryter instansen.
Terminate – Avslutar instansen.
Det här beteendet kan konfigureras i kod enligt följande exempel.
host.Description.Behaviors.Add(new WorkflowUnhandledExceptionBehavior { Action = WorkflowUnhandledExceptionAction.Abandon });
Den kan också konfigureras i en konfigurationsfil enligt följande exempel.
<behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
          <workflowUnhandledExceptionBehavior action="Abandon" />
        </behavior>
      </serviceBehaviors>
</behaviors>
Vara värd för icke-tjänstarbetsflöden
WorkflowServiceHost kan användas som värd för icke-tjänstarbetsflöden eller arbetsflöden som antingen inte börjar med en Receive aktivitet eller arbetsflöden som inte använder meddelandeaktiviteterna. Arbetsflödestjänster börjar normalt med en Receive aktivitet. När ett WorkflowServiceHost meddelande för en arbetsflödestjänst tas emot skapas en ny instans av arbetsflödestjänsten om den inte redan körs (eller har sparats). Om ett arbetsflöde inte börjar med en mottagningsaktivitet kan det inte startas genom att skicka ett meddelande eftersom det inte finns någon aktivitet för att ta emot meddelandet. Om du vill vara värd för ett arbetsflöde som inte är en tjänst härleder du en klass från WorkflowHostingEndpoint och åsidosätter OnGetInstanceId, OnGetCreationContextoch OnResolveBookmark. Åsidosätt OnGetInstanceId om du vill ange ett föredraget instans-ID. Åsidosätt OnGetCreationContext för att skapa en anpassad arbetsflödeskontext eller populera en instans av den befintliga WorkflowCreationContext. Åsidosätt OnResolveBookmark för att manuellt extrahera bokmärket från det inkommande meddelandet. Om du åsidosätter den här metoden måste du anropa SendResponse i dess brödtext för att svara på meddelandet som skickas till WorkflowHostingEndpoint. Om du inte gör det kan en MaxConcurrentCalls gräns så småningom överskridas. I tvåvägskontrakt kan du identifiera att du inte kan anropa SendResponse på grund av klientens misslyckande med att ta emot ett svar. I envägskontrakt kanske du inte känner igen misstaget att inte anropa SendResponse förrän det är för sent när begränsningsgränsen MaxConcurrentCalls har överskridits. Om du vill skapa en ny instans av ett arbetsflöde som inte är en tjänst deklarerar du ett tjänstkontrakt som definierar en åtgärd som skapar en ny instans. Skapandeåtgärden bör ta en IDictionary-sträng<, ett objekt> för att skicka eventuella obligatoriska arbetsflödesparametrar. Det här kontraktet implementeras implicit av den härledda WorkflowHostingEndpoint-klassen. När du hostar arbetsflödet, lägg till en instans av den klass som härrör från WorkflowHostingEndpoint till värden genom att anropa AddServiceEndpoint och Open. Skapa en instans av arbetsflödet genom att skapa en ChannelFactory<TChannel> av din tjänstkontraktstyp och anropa CreateChannel. Du kan sedan anropa den create-åtgärd som definierats i ditt tjänstkontrakt.