Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í WorkflowIdentity při WorkflowApplication hostování. 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 jsou předávány všem nakonfigurovaným sledovacím službám v několika různých bodech životního cyklu aktivity běhovým prostředím. 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 WorkflowIdentity, které je nakonfigurováno tak, aby odpovídalo WorkflowIdentity uložené 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...
Pokud WorkflowIdentity, které bylo použito při opětovném načtení instance pracovního postupu, neodpovídá uloženému WorkflowIdentity, dojde k vyvolání VersionMismatchException. 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, která je nakonfigurována pro novější verzi pracovního postupu hypotéky, která neodpovídá uložené 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.
Pro pro získání WorkflowIdentity z trvalé instance pracovního postupu se použije metoda GetInstance. Metoda GetInstance přebírá Id instance trvalého 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 Aktualizace databází trvalosti v rozhraní .NET Framework 4 pro podporu verzování pracovních postupů.
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 WorkflowApplication, a pak se načte pracovní postup. Všimněte si, že Load přetížení, které přijímá WorkflowApplicationInstance, je používáno, SqlWorkflowInstanceStore bylo nakonfigurováno na WorkflowApplicationInstance a je používáno WorkflowApplication, proto není třeba konfigurovat jeho vlastnost InstanceStore.
Poznámka:
Pokud je vlastnost InstanceStore nastavena, musí být nastavena se stejnou instancí SqlWorkflowInstanceStore, kterou používá WorkflowApplicationInstance, nebo jinak bude vyvolána ArgumentException s následující zprávou: 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'.
Aktualizovat schéma databáze
Otevřete SQL Server Management Studio a připojte se k serveru trvalé databáze, například .\SQLEXPRESS.
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\enVyberte SqlWorkflowInstanceStoreSchemaUpgrade.sql a klikněte na Otevřít.
V rozbalovacím seznamu Dostupné databáze vyberte název trvalé databáze.
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.