Práce s víc verzemi současně ve třídě WorkflowServiceHost

WorkflowServiceHost Souběžná správa verzí zavedená v rozhraní .NET Framework 4.5 poskytuje možnost hostovat více verzí služby pracovního postupu v jednom koncovém bodu. Poskytované souběžné funkce umožňují nakonfigurovat službu pracovního postupu tak, aby se nové instance služby pracovního postupu vytvořily pomocí nové definice pracovního postupu a spuštěné instance se dokončily pomocí existující definice. Toto téma obsahuje přehled souběžného spouštění služby pracovního postupu pomocí WorkflowServiceHost.

Hostování více verzí ve službě pracovního postupu

WorkflowServiceHost obsahuje dvě vlastnosti, které lze nakonfigurovat tak, aby umožňovaly provádění více verzí pracovního postupu vedle sebe: SupportedVersions a DefinitionIdentity. SupportedVersions obsahuje podporované verze služby pracovního postupu a DefinitionIdentity slouží k jedinečné identifikaci jednotlivých služeb pracovního postupu. To se provádí přidružením WorkflowIdentity ke službě pracovního postupu. A WorkflowIdentity obsahuje tři identifikační údaje. Name a Version obsahují název a Version a jsou povinné a Package je volitelné a lze jej použít k zadání dalšího řetězce obsahujícího informace, jako je název sestavení nebo jiné požadované informace. Každá služba pracovního postupu obsažená v kolekci SupportedVersions musí mít jedinečnou WorkflowIdentity. A WorkflowIdentity je jedinečný, pokud některé z jejích tří vlastností se liší od jiné WorkflowIdentity. A null WorkflowIdentity je povolená hodnota pro DefinitionIdentity, ale pouze jedna předchozí verze služby pracovního postupu může mít null WorkflowIdentityhodnotu .

Důležité

A WorkflowIdentity nesmí obsahovat žádné identifikovatelné osobní údaje (PII). WorkflowIdentity se skládá ze tří částí: a Name (String), a Version (Version) a Package (String). Informace o WorkflowIdentity použitém k vytvoření instance se vygenerují do všech nakonfigurovaných sledovacích služeb v několika různých bodech životního cyklu aktivity modulem runtime. Sledování WF nemá žádný mechanismus pro skrytí PII (citlivých uživatelských dat). Proto by instance neměla obsahovat žádná data PII, WorkflowIdentity protože bude vygenerována modulem runtime při sledování záznamů a může být viditelná pro každého, kdo má přístup k zobrazení záznamů sledování.

Pravidla pro hostování více verzí služby pracovního postupu

Když uživatel přidá další verzi WorkflowServiceHost, musí být splněno několik podmínek, aby služba pracovního postupu byla hostována se stejnou sadou koncových bodů a popisem. Pokud některé z dalších verzí nesplní tyto podmínky, WorkflowServiceHost vyvolá při zavolání výjimku Open . Každá definice pracovního postupu poskytovaná hostiteli jako další verze musí splňovat následující požadavky (kde primární verze je definice služby pracovního postupu, která je poskytována konstruktoru hostitele). Další verze pracovního postupu musí:

  • Mají stejnou Name jako primární verzi služby pracovního postupu.

  • Nesmí obsahovat žádné Receive aktivity ani SendReply aktivity, Body které nejsou v primární verzi, a musí odpovídat kontraktu operace.

  • Mít jedinečný DefinitionIdentity. Jedna a pouze jedna definice pracovního postupu může mít nullDefinitionIdentity.

Některé změny jsou povolené. Mezi verzemi se můžou lišit následující položky:

Konfigurace definiceIdentity

Při vytvoření služby pracovního postupu pomocí návrháře pracovního postupu je nastavena DefinitionIdentity pomocí okna Vlastnosti . Kliknutím mimo kořenovou aktivitu služby v návrháři vyberte službu pracovního postupu a v nabídce Zobrazit zvolte okno Vlastnosti. V rozevíracím seznamu, který se zobrazí vedle vlastnosti DefinitionIdentity, vyberte WorkflowIdentity a potom rozbalte a zadejte požadované WorkflowIdentity vlastnosti. V následujícím příkladu DefinitionIdentity je nakonfigurována s Name MortgageWorkflow a Version z 1.0.0.0. Package je nepovinný a v tomto příkladu je null.

Snímek obrazovky znázorňující vlastnost DefinitionIdentity

Pokud je služba pracovního postupu hostovaná samostatně, DefinitionIdentity nakonfiguruje se při vytváření služby pracovního postupu. V následujícím příkladu DefinitionIdentity je nakonfigurován se stejnými hodnotami jako v předchozím příkladu Name MortgageWorkflow s a Name z 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  

Není vyžadována hodnota A DefinitionIdentity , i když pouze jedna verze služby pracovního postupu může mít hodnotu nullDefinitionIdentity.

Poznámka:

To je užitečné, pokud byla služba zpočátku nasazena bez nakonfigurované DefinitionIdentity konfigurace a pak se vytvoří aktualizovaná verze.

Přidání nové verze do služby pracovního postupu hostovaného webem

Prvním krokem při konfiguraci nové verze služby pracovního postupu ve webové hostované službě je vytvoření nové složky ve App_Code složce, která má stejný název jako soubor služby. Pokud je soubor služby xamlx pojmenovaný MortgageWorkflow.xamlx, musí být složka pojmenována MortgageWorkflow. Do této složky umístěte kopii původního souboru služby xamlx a přejmenujte ho na nový název, například MortgageWorkflowV1.xamlx. Proveďte požadované změny v primární službě, aktualizujte její DefinitionIdentitya pak službu nasaďte. V následujícím příkladu DefinitionIdentity byla aktualizována o Name a MortgageWorkflow Version z 2.0.0.0.

Snímek obrazovky znázorňující definiciIdentity WorkflowIdentity

Když se služba restartuje, předchozí verze se automaticky přidá do SupportedVersions kolekce, protože je umístěná v určené App_Code podsložce. Upozorňujeme, že pokud má null DefinitionIdentity primární verze služby pracovního postupu předchozí verze, nepřidá se. Jedna verze může obsahovat nullDefinitionIdentityverzi , ale pokud existuje více verzí, nesmí být primární verze s verzí nebo nullDefinitionIdentity jinak předchozí verze nebudou SupportedVersions přidány do kolekce.

Přidání nové verze do služby pracovního postupu v místním prostředí

Při přidávání nové verze do služby WorkflowServiceHost pracovního postupu v místním prostředí je nakonfigurovaná primární verze služby pracovního postupu a předchozí verze musí být explicitně přidány SupportedVersions do kolekce. V následujícím příkladu WorkflowServiceHost je nakonfigurována primární služba pracovního postupu, která používá MortgageWorkflowV2 definici pracovního postupu, a služba pracovního postupu nakonfigurovaná s MortgageWorkflowV1 definicí pracovního postupu se přidá do SupportedVersions kolekce. Každá služba pracovního postupu má nakonfigurovanou jedinečnou DefinitionIdentity verzi definice pracovního postupu.

// 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)