Použití WorkflowIdentity a správy verzí

WorkflowIdentity poskytuje vývojářům aplikací pracovních postupů způsob, jak přidružit název a definici Version pracovního postupu a aby tyto informace byly přidruženy k trvalé instanci pracovního postupu. Tyto informace o identitě můžou vývojáři aplikací pracovních postupů používat k povolení scénářů, jako je souběžné spouštění více verzí definice pracovního postupu, a poskytuje základní kámen pro další funkce, jako je dynamická aktualizace. Toto téma obsahuje přehled použití s WorkflowApplication hostováníWorkflowIdentity. Informace o souběžné provádění definic pracovních postupů ve službě pracovního postupu naleznete v tématu Souběžná správa verzí v WorkflowServiceHost. Informace o dynamické aktualizaci naleznete v tématu Dynamická aktualizace.

V tomto tématu

Použití WorkflowIdentity

Pokud chcete použít WorkflowIdentity, vytvořte instanci, nakonfigurujte ji a přidružte WorkflowApplication ji k instanci. Instance 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. A WorkflowIdentity je jedinečný, pokud některé z jejích tří vlastností se liší od jiné WorkflowIdentity.

Důležité

A WorkflowIdentity nesmí obsahovat žádné identifikovatelné osobní údaje (PII). 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í.

V následujícím příkladu WorkflowIdentity se vytvoří a přidružuje k instanci pracovního postupu vytvořeného pomocí MortgageWorkflow definice pracovního postupu.

WorkflowIdentity identityV1 = new WorkflowIdentity
{
    Name = "MortgageWorkflow v1",
    Version = new Version(1, 0, 0, 0)
};

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow(), identity);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Run the workflow.
wfApp.Run();

Při opětovném načítání a obnovení pracovního postupu se musí použít nakonfigurovaná tak, WorkflowIdentity aby odpovídala WorkflowIdentity trvalé instanci pracovního postupu.

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow(), identityV1);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Load the workflow.
wfApp.Load(instanceId);

// Resume the workflow...

WorkflowIdentity Pokud použité při opětovném načtení instance pracovního postupu neodpovídá trvalému WorkflowIdentityvýskytu , VersionMismatchException vyvolá se. V následujícím příkladu se provede pokus o načtení instance MortgageWorkflow , která byla zachována v předchozím příkladu. Tento pokus o načtení se provádí pomocí WorkflowIdentity nakonfigurované novější verze pracovního postupu hypotéky, který neodpovídá trvalé instanci.

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow_v2(), identityV2);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Attempt to load the workflow instance.
wfApp.Load(instanceId);

// Resume the workflow...

Při spuštění předchozího kódu se vyvolá následující VersionMismatchException kód.

The WorkflowIdentity ('MortgageWorkflow v1; Version=1.0.0.0') of the loaded instance does not match the WorkflowIdentity ('MortgageWorkflow v2; Version=2.0.0.0') of the provided workflow definition. The instance can be loaded using a different definition, or updated using Dynamic Update.

Souběžné spouštění pomocí WorkflowIdentity

WorkflowIdentity lze použít k usnadnění provádění více verzí pracovního postupu vedle sebe. Jedním z běžných scénářů je změna obchodních požadavků na dlouhotrvající pracovní postup. Při nasazení aktualizované verze může být spuštěno mnoho instancí pracovního postupu. Hostitelská aplikace je možné nakonfigurovat tak, aby při spouštění nových instancí používala aktualizovanou definici pracovního postupu a je zodpovědná za poskytnutí správné definice pracovního postupu při obnovení instancí. WorkflowIdentity lze použít k identifikaci a zadání odpovídající definice pracovního postupu při obnovení instancí pracovního postupu.

K načtení WorkflowIdentity trvalé instance pracovního postupu se GetInstance použije metoda. Metoda GetInstance přebírá Id trvalou instanci pracovního postupu a SqlWorkflowInstanceStore která obsahuje trvalou instanci a vrátí hodnotu WorkflowApplicationInstance. A WorkflowApplicationInstance obsahuje informace o trvalé instanci pracovního postupu, včetně jeho přidružené WorkflowIdentity. Toto přidružení WorkflowIdentity může hostitel použít k zadání správné definice pracovního postupu při načítání a obnovení instance pracovního postupu.

Poznámka:

Hodnota null WorkflowIdentity je platná a hostitel ji může použít k mapování instancí, které byly zachovány bez přidružené WorkflowIdentity k správné definici pracovního postupu. K tomuto scénáři může dojít v případě, že aplikace pracovního postupu nebyla původně napsána pomocí správy verzí pracovního postupu nebo při upgradu aplikace z rozhraní .NET Framework 4. Další informace naleznete v tématu Upgrade databází trvalosti rozhraní .NET Framework 4 na podporu správy verzí pracovního postupu.

V následujícím příkladu Dictionary<WorkflowIdentity, Activity> se používá k přidružení WorkflowIdentity instancí k jejich odpovídajících definicích pracovního postupu a pracovní postup se spustí pomocí MortgageWorkflow definice pracovního postupu, která je přidružena k identityV1WorkflowIdentity.

WorkflowIdentity identityV1 = new WorkflowIdentity
{
    Name = "MortgageWorkflow v1",
    Version = new Version(1, 0, 0, 0)
};

WorkflowIdentity identityV2 = new WorkflowIdentity
{
    Name = "MortgageWorkflow v2",
    Version = new Version(2, 0, 0, 0)
};

Dictionary<WorkflowIdentity, Activity> WorkflowVersionMap = new Dictionary<WorkflowIdentity, Activity>();
WorkflowVersionMap.Add(identityV1, new MortgageWorkflow());
WorkflowVersionMap.Add(identityV2, new MortgageWorkflow_v2());

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow(), identityV1);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Run the workflow.
wfApp.Run();

V následujícím příkladu jsou informace o trvalé instanci pracovního postupu z předchozího příkladu načteny voláním GetInstancea trvalé WorkflowIdentity informace slouží k načtení odpovídající definice pracovního postupu. Tyto informace slouží ke konfiguraci WorkflowApplicationa pak se načte pracovní postup. Všimněte si, že vzhledem k Load tomu, že přetížení, které přebírá je WorkflowApplicationInstance používáno, SqlWorkflowInstanceStore je nakonfigurováno na objektu WorkflowApplicationInstanceWorkflowApplication , a proto jeho InstanceStore vlastnost není nutné konfigurovat.

Poznámka:

InstanceStore Pokud je vlastnost nastavena, musí být nastavena se stejnou SqlWorkflowInstanceStore instancí, kterou WorkflowApplicationInstance používá nebo jinak ArgumentException bude vyvolán následující zpráva: The instance is configured with a different InstanceStore than this WorkflowApplication..

// Get the WorkflowApplicationInstance of the desired workflow from the specified
// SqlWorkflowInstanceStore.
WorkflowApplicationInstance instance = WorkflowApplication.GetInstance(instanceId, store);

// Use the persisted WorkflowIdentity to retrieve the correct workflow
// definition from the dictionary.
Activity definition = WorkflowVersionMap[instance.DefinitionIdentity];

WorkflowApplication wfApp = new WorkflowApplication(definition, instance.DefinitionIdentity);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Load the persisted workflow instance.
wfApp.Load(instance);

// Resume the workflow...

Upgrade databází trvalosti rozhraní .NET Framework 4 na podporu správy verzí pracovního postupu

Pro upgrade databází vytvořených pomocí databázových skriptů rozhraní .NET Framework 4 se poskytuje SqlWorkflowInstanceStoreSchemaUpgrade.sql databázový skript. Tento skript aktualizuje databáze tak, aby podporovaly nové funkce správy verzí zavedené v rozhraní .NET Framework 4.5. Všechny trvalé instance pracovního postupu v databázích mají výchozí hodnoty správy verzí a můžou se pak účastnit souběžného spouštění a dynamické aktualizace.

Pokud aplikace pracovního postupu rozhraní .NET Framework 4.5 pokusí o všechny operace trvalosti, které používají nové funkce správy verzí v databázi trvalosti, která nebyla upgradována pomocí poskytnutého skriptu, InstancePersistenceCommandException vyvolá se zpráva podobná následující zprávě.

The SqlWorkflowInstanceStore has a database version of '4.0.0.0'. InstancePersistenceCommand 'System.Activities.DurableInstancing.CreateWorkflowOwnerWithIdentityCommand' cannot be run against this database version.  Please upgrade the database to '4.5.0.0'.

Upgrade schématu databáze

  1. Otevřete APLIKACI SQL Server Management Studio a připojte se k databázovému serveru trvalosti, například .\SQLEXPRESS.

  2. V nabídce Soubor zvolte Otevřít, Soubor. Přejděte do následující složky: C:\Windows\Microsoft.NET\Framework\v4.0.30319\sql\en

  3. Vyberte SqlWorkflowInstanceStoreSchemaUpgrade.sql a klikněte na Otevřít.

  4. V rozevíracím seznamu Dostupné databáze vyberte název databáze trvalosti.

  5. V nabídce Dotaz zvolte Spustit.

Po dokončení dotazu se schéma databáze upgraduje a v případě potřeby můžete zobrazit výchozí identitu pracovního postupu přiřazenou k trvalým instancím pracovního postupu. Rozbalte databázi trvalosti v uzlu Databáze v Průzkumník objektů a poté rozbalte uzel Zobrazení. Klikněte pravým tlačítkem na System.Activities.DurableInstancing.Instances a zvolte Vybrat prvních 1000 řádků. Posuňte se na konec sloupců a všimněte si, že do zobrazení je přidáno šest dalších sloupců: IdentityName, IdentityPackage, Build, Major, Minor a Revision. Všechny trvalé pracovní postupy budou mít pro tato pole hodnotu NULL , která představuje identitu pracovního postupu s hodnotou null.