Megosztás a következőn keresztül:


A WorkflowIdentity és a Verziószámozás használata

WorkflowIdentity Lehetővé teszi a munkafolyamat-alkalmazások fejlesztői számára, hogy egy nevet és egy Version munkafolyamat-definíciót társítjanak, és hogy ezek az információk egy állandó munkafolyamat-példányhoz legyenek társítva. Ezeket az identitásadatokat a munkafolyamat-alkalmazás fejlesztői felhasználhatják olyan forgatókönyvek engedélyezéséhez, mint például a munkafolyamat-definíciók több verziójának egymás melletti végrehajtása, és a többi funkció, például a dinamikus frissítés sarokköve. Ez a témakör áttekintést nyújt az üzemeltetéssel való használatról WorkflowIdentity WorkflowApplication . A munkafolyamat-definíciók munkafolyamat-szolgáltatásban történő párhuzamos végrehajtásával kapcsolatos információkért lásd : Párhuzamos verziószámozás a WorkflowServiceHost szolgáltatásban. A dinamikus frissítésről további információt a Dinamikus frissítés című témakörben talál.

A témakör tartalma

A WorkflowIdentity használata

A használatához WorkflowIdentityhozzon létre egy példányt, konfigurálja és társítsa egy WorkflowApplication példányhoz. Egy WorkflowIdentity példány három azonosító információt tartalmaz. NameVersion és tartalmaz egy nevet és egyVersion, és kötelező, és Package nem kötelező, és használható, hogy adjon meg egy további sztringet, amely olyan információkat tartalmaz, mint a szerelvény neve vagy más kívánt információkat. Az A WorkflowIdentity akkor egyedi, ha a három tulajdonság bármelyike eltér a másiktól WorkflowIdentity.

Fontos

Az A WorkflowIdentity nem tartalmazhat személyazonosításra alkalmas adatokat (PII). WorkflowIdentity A példányok létrehozásához használt adatok a futtatókörnyezet által a tevékenység életciklusának több különböző pontján konfigurált nyomkövetési szolgáltatások számára lesznek kibocsátva. A WF Tracking nem rendelkezik a PII (bizalmas felhasználói adatok) elrejtésére szolgáló mechanizmus használatával. Ezért a WorkflowIdentity példányok nem tartalmazhatnak PII-adatokat, mivel azokat a futtatókörnyezet bocsátja ki a nyomkövetési rekordokban, és bárki számára látható lehet, aki hozzáfér a nyomkövetési rekordok megtekintéséhez.

Az alábbi példában egy WorkflowIdentity munkafolyamat-definícióval MortgageWorkflow létrehozott munkafolyamat-példány jön létre és van társítva.

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();

Munkafolyamat újrabetöltésekor és folytatásakor olyant WorkflowIdentity kell használni, amelyet úgy konfiguráltak, hogy megfeleljen a WorkflowIdentity megőrzött munkafolyamat-példánynak.

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...

Ha a WorkflowIdentity munkafolyamat-példány újrabetöltéséhez használt példány nem egyezik meg a megőrzött WorkflowIdentitypéldánysal, VersionMismatchException a rendszer a következőt küldi el. Az alábbi példában terhelési kísérlet történik az MortgageWorkflow előző példában megőrzött példányon. Ez a terhelési kísérlet a WorkflowIdentity jelzálog-munkafolyamat egy újabb verziójához konfigurált, a megőrzött példánynak nem megfelelő verziójával történik.

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...

Az előző kód végrehajtásakor a rendszer a következőket VersionMismatchException hajtja végre.

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.

Párhuzamos végrehajtás a WorkflowIdentity használatával

WorkflowIdentity a munkafolyamat több verziójának egymás melletti végrehajtásának megkönnyítésére használható. Az egyik gyakori forgatókönyv az üzleti követelmények módosítása egy hosszú ideig futó munkafolyamaton. A munkafolyamat számos példánya futhat frissített verzió üzembe helyezésekor. A gazdaalkalmazás konfigurálható úgy, hogy az új példányok indításakor a frissített munkafolyamat-definíciót használja, és a gazdaalkalmazás feladata a megfelelő munkafolyamat-definíció megadása a példányok folytatásakor. WorkflowIdentity a munkafolyamat-példányok folytatásakor a megfelelő munkafolyamat-definíció azonosítására és megadására használható.

Egy megőrzött munkafolyamat-példány lekéréséhez WorkflowIdentity a rendszer a metódust GetInstance használja. A GetInstance metódus a Id megőrzött munkafolyamat-példányt és a SqlWorkflowInstanceStore megőrzött példányt tartalmazó példányt veszi át, és visszaad egy WorkflowApplicationInstance. Az A WorkflowApplicationInstance egy tárolt munkafolyamat-példányra vonatkozó információkat tartalmaz, beleértve a társított példányt WorkflowIdentityis. Ezt a társítást WorkflowIdentity a gazdagép használhatja a megfelelő munkafolyamat-definíció megadásához a munkafolyamat-példány betöltésekor és folytatásakor.

Feljegyzés

A null WorkflowIdentity érték érvényes, és a gazdagép a megfelelő munkafolyamat-definícióval nem társított WorkflowIdentity példányok leképezésére használhatja. Ez a forgatókönyv akkor fordulhat elő, ha egy munkafolyamat-alkalmazás eredetileg nem munkafolyamat-verziószámozással lett megírva, vagy ha egy alkalmazást frissítettek a .NET-keretrendszer 4-es verzióról. További információ: .NET-keretrendszer 4 adatmegőrzési adatbázis frissítése munkafolyamat-verziószámozás támogatására.

Az alábbi példában a Dictionary<WorkflowIdentity, Activity> példányok társítása WorkflowIdentity a megfelelő munkafolyamat-definíciókkal történik, a munkafolyamat pedig a MortgageWorkflow munkafolyamat-definícióval indul el, amely a identityV1 WorkflowIdentitykövetkezőhöz van társítva.

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();

Az alábbi példában az előző példában tárolt munkafolyamat-példány adatai meghívással GetInstancelesznek lekérve, a megőrzött WorkflowIdentity adatok pedig a megfelelő munkafolyamat-definíció lekérésére szolgálnak. Ez az információ a WorkflowApplicationmunkafolyamat konfigurálásához, majd a munkafolyamat betöltéséhez használható. Vegye figyelembe, hogy mivel a Load használt túlterhelést használja, a SqlWorkflowInstanceStore rajta konfigurált WorkflowApplicationInstance túlterhelést a WorkflowApplication rendszer használja, ezért a tulajdonságát InstanceStore nem kell konfigurálni.WorkflowApplicationInstance

Feljegyzés

Ha a InstanceStore tulajdonság be van állítva, akkor ugyanazt SqlWorkflowInstanceStore a példányt kell beállítania, amelyet a WorkflowApplicationInstance rendszer használ, különben ArgumentException a következő üzenet jelenik meg: 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...

A .NET-keretrendszer 4-es adatmegőrzési adatbázisok frissítése a munkafolyamat verziószámozásának támogatására

A SqlWorkflowInstanceStoreSchemaUpgrade.sql adatbázisszkript a .NET-keretrendszer 4 adatbázisszkripttel létrehozott adatmegőrzési adatbázisok frissítésére szolgál. Ez a szkript frissíti az adatbázisokat, hogy támogassa a .NET-keretrendszer 4.5-ben bevezetett új verziószámozási képességeket. Az adatbázisokban lévő, megőrzött munkafolyamat-példányok alapértelmezett verziószámozási értékeket kapnak, és részt vehetnek egymás mellett a végrehajtásban és a dinamikus frissítésben.

Ha egy .NET-keretrendszer 4.5-ös munkafolyamat-alkalmazás olyan adatmegőrzési műveleteket kísérel meg, amelyek az új verziószámozási funkciókat használják egy olyan adatmegőrzési adatbázison, amelyet nem frissítettek a megadott szkripttel, InstancePersistenceCommandException a rendszer az alábbi üzenethez hasonló üzenettel jelenik meg.

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'.

Az adatbázisséma frissítése

  1. Nyissa meg az SQL Server Management Studiót, és csatlakozzon a perzisztenciaadatbázis-kiszolgálóhoz, például az .\SQLEXPRESS-hez.

  2. Válassza a Fájl menü Megnyitás, Fájl elemét. Keresse meg a következő mappát: C:\Windows\Microsoft.NET\Framework\v4.0.30319\sql\en

  3. Válassza a SqlWorkflowInstanceStoreSchemaUpgrade.sql, majd kattintson a Megnyitás gombra.

  4. Válassza ki a megőrzési adatbázis nevét az Elérhető adatbázisok legördülő listában.

  5. Válassza a Lekérdezés menü Végrehajtás parancsát.

A lekérdezés befejezése után az adatbázisséma frissül, és ha szükséges, megtekintheti a megmaradó munkafolyamat-példányokhoz rendelt alapértelmezett munkafolyamat-identitást. Bontsa ki a perzisztencia-adatbázist az Objektumkezelő Adatbázis csomópontjában, majd bontsa ki a Nézetek csomópontot. Kattintson a jobb gombbal a System.Activities.DurableInstancing.Instances elemre, és válassza a Felső 1000 sor kijelölése lehetőséget. Görgessen az oszlopok végéhez, és figyelje meg, hogy további hat oszlop van hozzáadva a nézethez: IdentityName, IdentityPackage, Build, Major, Minor és Revision. A megőrzött munkafolyamatok null értékűek lesznek ezekhez a mezőkhöz, amelyek null munkafolyamat-identitást jelölnek.