Dela via


Versionshantering sida vid sida i WorkflowServiceHost

Versionshantering WorkflowServiceHost sida vid sida som introducerades i .NET Framework 4.5 ger möjlighet att vara värd för flera versioner av en arbetsflödestjänst på en enda slutpunkt. De funktioner som tillhandahålls sida vid sida gör att en arbetsflödestjänst kan konfigureras så att nya instanser av arbetsflödestjänsten skapas med den nya arbetsflödesdefinitionen, samtidigt som instanser som körs slutförs med den befintliga definitionen. Det här avsnittet innehåller en översikt över körningen av arbetsflödestjänsten sida vid sida med hjälp av WorkflowServiceHost.

Vara värd för flera versioner i en arbetsflödestjänst

WorkflowServiceHost innehåller två egenskaper som kan konfigureras för att tillåta att flera versioner av ett arbetsflöde körs sida vid sida: SupportedVersions och DefinitionIdentity. SupportedVersions innehåller de versioner av arbetsflödestjänsten som stöds och DefinitionIdentity används för att unikt identifiera varje arbetsflödestjänst. Detta görs genom att associera en WorkflowIdentity med arbetsflödestjänsten. A WorkflowIdentity innehåller tre identifierande informationsdelar. Name och Version innehåller ett namn och ett Version och krävs, och Package är valfritt och kan användas för att ange ytterligare en sträng som innehåller information som sammansättningsnamn eller annan önskad information. Varje arbetsflödestjänst som ingår i SupportedVersions samlingen måste ha en unik WorkflowIdentity. A WorkflowIdentity är unikt om någon av dess tre egenskaper skiljer sig från en annan WorkflowIdentity. A null WorkflowIdentity är ett tillåtet värde för DefinitionIdentity, men endast en tidigare version av en arbetsflödestjänst kan ha en null WorkflowIdentity.

Viktigt!

En WorkflowIdentity bör inte innehålla någon personligt identifierbar information (PII). WorkflowIdentity består av tre delar: en Name (String), en Version (Version) och en Package (String). Information om den WorkflowIdentity som används för att skapa en instans skickas till alla konfigurerade spårningstjänster vid flera olika tidpunkter i aktivitetslivscykeln av körningen. WF-spårning har ingen mekanism för att dölja PII (känsliga användardata). Därför bör en WorkflowIdentity instans inte innehålla några PII-data eftersom den genereras av körningen i spårningsposter och kan vara synlig för alla som har åtkomst till att visa spårningsposterna.

Regler för att vara värd för flera versioner av en arbetsflödestjänst

När en användare lägger till ytterligare en version i WorkflowServiceHostfinns det flera villkor som måste uppfyllas för att en arbetsflödestjänst ska vara värd för samma uppsättning slutpunkter och beskrivning. Om någon av de ytterligare versionerna inte uppfyller dessa villkor utlöser WorkflowServiceHost undantaget när Open anropas. Varje arbetsflödesdefinition som tillhandahålls värden som en ytterligare version måste uppfylla följande krav (där den primära versionen är arbetsflödestjänstdefinitionen som tillhandahålls till värdkonstruktorn). Den ytterligare arbetsflödesversionen måste:

  • Ha samma Name som den primära versionen av arbetsflödestjänsten.

  • Får inte ha några Receive aktiviteter eller SendReply aktiviteter i den Body som inte finns i den primära versionen, och de måste matcha åtgärdskontraktet.

  • Ha en unik DefinitionIdentity. En och endast en arbetsflödesdefinition kan ha en nullDefinitionIdentity.

Vissa ändringar tillåts. Följande objekt kan skilja sig mellan versionerna:

Konfigurera DefinitionIdentity

När en arbetsflödestjänst skapas med hjälp av arbetsflödesdesignern DefinitionIdentity anges den med hjälp av fönstret Egenskaper . Klicka utanför tjänstens rotaktivitet i designern för att välja arbetsflödestjänsten och välj Egenskapsfönstermenyn Visa . Välj WorkflowIdentity i listrutan som visas bredvid egenskapen DefinitionIdentity och expandera och ange önskade WorkflowIdentity egenskaper. I följande exempel DefinitionIdentity konfigureras med MortgageWorkflow Name och av Version 1.0.0.0. Package är valfritt och i det här exemplet är null.

Skärmbild som visar egenskapen DefinitionIdentity.

När en arbetsflödestjänst DefinitionIdentity är lokalt installerad konfigureras den när arbetsflödestjänsten skapas. I följande exempel DefinitionIdentity konfigureras med samma värden som i föregående exempel, med Name MortgageWorkflow och en Name av 1.0.0.0.

WorkflowService service = new WorkflowService  
{  
    Name = "MortgageWorkflowService",  
    Body = new MortgageWorkflow(),  
    DefinitionIdentity = new WorkflowIdentity  
    {  
        Name = "MortgageWorkflow",  
        Version = new Version(1, 0, 0, 0)  
    }  
};  
Dim service As New WorkflowService  
With service  
    .Name = "MortgageWorkflowService"  
    .Body = New MortgageWorkflow  
    .DefinitionIdentity = New WorkflowIdentity With _  
    { _  
        .Name = "MortgageWorkflow", _  
        .Version = New Version(1, 0, 0, 0) _  
    }  
End With  

A DefinitionIdentity krävs inte, även om endast en version av arbetsflödestjänsten kan ha nullDefinitionIdentity.

Kommentar

Detta är användbart om tjänsten distribuerades först utan konfigurerad DefinitionIdentity och sedan skapas en uppdaterad version.

Lägga till en ny version i en webbaserad arbetsflödestjänst

Det första steget i att konfigurera en ny version av en arbetsflödestjänst i en webbaserad tjänst är att skapa en ny mapp i App_Code mappen som har samma namn som tjänstfilen. Om tjänstens xamlx fil heter MortgageWorkflow.xamlxmåste mappen ha namnet MortgageWorkflow. Placera en kopia av den ursprungliga tjänstens xamlx fil i den här mappen och byt namn på den till ett nytt namn, till exempel MortgageWorkflowV1.xamlx. Gör önskade ändringar i den primära tjänsten, uppdatera dess DefinitionIdentityoch distribuera sedan tjänsten. I följande exempel DefinitionIdentity har uppdaterats med en Name av MortgageWorkflow och en Version av 2.0.0.0.

Skärmbild som visar DefinitionIdentity för WorkflowIdentity.

När tjänsten startas om läggs den tidigare versionen automatiskt till i SupportedVersions samlingen eftersom den finns i den avsedda App_Code undermappen. Observera att om den primära versionen av arbetsflödestjänsten har en null DefinitionIdentity tidigare version kommer inte att läggas till. En version kan ha en nullDefinitionIdentity, men om det finns flera versioner får den primära versionen inte vara den med nullDefinitionIdentity , annars läggs inte tidigare versioner till i SupportedVersions samlingen.

Lägga till en ny version i en lokalt installerad arbetsflödestjänst

När du lägger till en ny version i en lokalt installerad arbetsflödestjänst WorkflowServiceHost konfigureras den med den primära versionen av arbetsflödestjänsten och tidigare versioner måste uttryckligen läggas till i SupportedVersions samlingen. I följande exempel konfigureras en WorkflowServiceHost med en primär arbetsflödestjänst som använder en MortgageWorkflowV2 arbetsflödesdefinition, och en arbetsflödestjänst som konfigurerats med en MortgageWorkflowV1 arbetsflödesdefinition läggs till i SupportedVersions samlingen. Varje arbetsflödestjänst är konfigurerad med en unik DefinitionIdentity som återspeglar versionen av arbetsflödesdefinitionen.

// Create the primary version of the workflow service.  
WorkflowService serviceV2 = new WorkflowService  
{  
    Name = "MortgageWorkflowService",  
    Body = new MortgageWorkflowV2(),  
    DefinitionIdentity = new WorkflowIdentity  
    {  
        Name = "MortgageWorkflow",  
        Version = new Version(2, 0, 0, 0)  
    }  
};  
  
// Configure the WorkflowServiceHost with the current version  
// of the workflow service. This code requires Administrator  
// privileges to function correctly. If running from Visual  
// Studio, Visual Studio must be run with Administrator privileges.  
WorkflowServiceHost host = new WorkflowServiceHost(serviceV2,
    new Uri("http://localhost:8080/MortgageWorkflowService"));  
  
// Create the previous version of the workflow service.  
WorkflowService serviceV1 = new WorkflowService  
{  
    Name = "MortgageWorkflowService",  
    Body = new MortgageWorkflowV1(),  
    DefinitionIdentity = new WorkflowIdentity  
    {  
        Name = "MortgageWorkflow",  
        Version = new Version(1, 0, 0, 0)  
    }  
};  
  
// Add the previous version of the service to the SupportedVersions collection.  
host.SupportedVersions.Add(serviceV1);  
'Create the primary version of the workflow service  
Dim serviceV2 As New WorkflowService  
With serviceV2  
    .Name = "MortgageWorkflowService"  
    .Body = New MortgageWorkflowV2  
    .DefinitionIdentity = New WorkflowIdentity With _  
    { _  
        .Name = "MortgageWorkflow", _  
        .Version = New Version(2, 0, 0, 0) _  
    }  
End With  
  
'Configure the WorkflowServiceHost with the current version  
'of the workflow service. This code requires Administrator  
'privileges to function correctly. If running from Visual  
'Studio, Visual Studio must be run with Administrator privileges.  
  
Dim host As New WorkflowServiceHost(serviceV2, _  
    New Uri("http://localhost:8080/MortgageWorkflowService"))  
  
'Create the previous version of the workflow service.  
Dim serviceV1 As New WorkflowService  
With serviceV1  
    .Name = "MortgageWorkflowService"  
    .Body = New MortgageWorkflowV1  
    .DefinitionIdentity = New WorkflowIdentity With _  
    { _  
        .Name = "MortgageWorkflow", _  
        .Version = New Version(1, 0, 0, 0) _  
    }  
End With  
  
'Add the previous version of the service to the SupportedVersions collection.  
host.SupportedVersions.Add(serviceV1)