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


Párhuzamos verziószámozás a WorkflowServiceHost szolgáltatásban

A WorkflowServiceHost .NET-keretrendszer 4.5-ben bevezetett párhuzamos verziószámozás lehetővé teszi a munkafolyamat-szolgáltatás több verziójának egyetlen végponton való üzemeltetését. A rendelkezésre álló egymás melletti funkciók lehetővé teszik a munkafolyamat-szolgáltatás konfigurálását, hogy a munkafolyamat-szolgáltatás új példányai az új munkafolyamat-definíció használatával legyenek létrehozva, miközben a példányok futtatása befejeződött a meglévő definíció használatával. Ez a témakör áttekintést nyújt a munkafolyamat-szolgáltatás egymás melletti végrehajtásáról a használatával WorkflowServiceHost.

Több verzió üzemeltetése munkafolyamat-szolgáltatásban

WorkflowServiceHost Két olyan tulajdonságot tartalmaz, amelyek konfigurálhatók úgy, hogy lehetővé tegyék a munkafolyamat több verziójának egymás melletti végrehajtását: SupportedVersions és DefinitionIdentity. SupportedVersions A munkafolyamat-szolgáltatás támogatott verzióit tartalmazza, és DefinitionIdentity az egyes munkafolyamat-szolgáltatások egyedi azonosítására szolgál. Ezt úgy végezheti el, hogy társít egy WorkflowIdentity munkafolyamat-szolgáltatást. Az A WorkflowIdentity 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. A gyűjteményben SupportedVersions található munkafolyamat-szolgáltatásoknak egyedinek WorkflowIdentitykell lenniük. Az A WorkflowIdentity akkor egyedi, ha a három tulajdonság bármelyike eltér a másiktól WorkflowIdentity. Az A null WorkflowIdentity egy engedélyezett érték DefinitionIdentity, de a munkafolyamat-szolgáltatásnak csak egy korábbi verziója rendelkezhet null WorkflowIdentity.

Fontos

Az A WorkflowIdentity nem tartalmazhat személyazonosításra alkalmas adatokat (PII). WorkflowIdentity három részből áll: a Name (String), a Version (Version) és a Package (String). 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.

Munkafolyamat-szolgáltatás több verziójának üzemeltetésére vonatkozó szabályok

Ha egy felhasználó hozzáad egy további verziót a WorkflowServiceHostverzióhoz, több feltételnek is teljesülnie kell ahhoz, hogy egy munkafolyamat-szolgáltatás ugyanazon végpontokkal és leírással legyen üzemeltetve. Ha a további verziók bármelyike nem felel meg ezeknek a feltételeknek, a WorkflowServiceHost rendszer kivételt okoz a meghíváskor Open . A gazdagépnek további verzióként biztosított munkafolyamat-definícióknak meg kell felelniük a következő követelményeknek (ahol az elsődleges verzió a gazdagépkonstruktor számára biztosított munkafolyamat-szolgáltatásdefiníció). A munkafolyamat további verziójának a következőnek kell lennie:

  • Ugyanazzal a Name módszerrel rendelkezik, mint a munkafolyamat-szolgáltatás elsődleges verziója.

  • Nem rendelkezhet Receive olyan tevékenységgel vagy SendReply tevékenységgel Body , amely nem az elsődleges verzióban található, és meg kell egyeznie a műveleti szerződéssel.

  • Egyedi .DefinitionIdentity Egy és csak egy munkafolyamat-definíció rendelkezhet nullDefinitionIdentity.

Bizonyos módosítások engedélyezettek. A következő elemek eltérhetnek a verzióktól:

A DefinitionIdentitás konfigurálása

Amikor munkafolyamat-szolgáltatást hoz létre a munkafolyamat-tervezővel, az a DefinitionIdentity Tulajdonságok ablak használatával van beállítva. Kattintson a szolgáltatás gyökértevékenységén kívülre a tervezőben a munkafolyamat-szolgáltatás kiválasztásához, majd a Nézet menü Tulajdonságok ablaka parancsára. Válassza a WorkflowIdentity lehetőséget a DefinitionIdentity tulajdonság mellett megjelenő legördülő listából, majd bontsa ki és adja meg a kívánt WorkflowIdentity tulajdonságokat. Az alábbi példában a DefinitionIdentity beállítás a következővel Name MortgageWorkflow van Version 1.0.0.0konfigurálva: Packagenem kötelező, és ebben a példában az .null

Képernyőkép a DefinitionIdentity tulajdonságról.

Ha egy munkafolyamat-szolgáltatás saját üzemeltetésű, a DefinitionIdentity munkafolyamat-szolgáltatás létrehozásakor lesz konfigurálva. Az alábbi példában a DefinitionIdentity beállítás ugyanazokkal az értékekkel van konfigurálva, mint az előző példában, az és a.1.0.0.0Name MortgageWorkflow Name

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  

Az A DefinitionIdentity nem kötelező, bár a munkafolyamat-szolgáltatásnak csak egy verziója lehet nullDefinitionIdentity értékű.

Feljegyzés

Ez akkor hasznos, ha a szolgáltatás kezdetben DefinitionIdentity konfigurálva lett üzembe helyezve, majd létrejön egy frissített verzió.

Új verzió hozzáadása webalapú munkafolyamat-szolgáltatáshoz

A munkafolyamat-szolgáltatás új verziójának webszolgáltatásban való konfigurálásának első lépése egy új mappa létrehozása abban a App_Code mappában, amelynek neve megegyezik a szolgáltatásfájl nevével. Ha a szolgáltatás fájljának xamlx neve el van nevezve MortgageWorkflow.xamlx, akkor a mappát el kell nevezni MortgageWorkflow. Helyezze az eredeti szolgáltatás fájljának xamlx másolatát ebbe a mappába, és nevezze át egy új névre, például MortgageWorkflowV1.xamlx. Végezze el a kívánt módosításokat az elsődleges szolgáltatáson, frissítse annak frissítését DefinitionIdentity, majd telepítse a szolgáltatást. Az alábbi példában a DefinitionIdentity program az egyikkel MortgageWorkflow és a Version következővel Name 2.0.0.0frissült.

Képernyőkép a WorkflowIdentitás Definícióidentitásáról.

Amikor a szolgáltatás újraindul, a rendszer automatikusan hozzáadja az előző verziót a SupportedVersions gyűjteményhez, mert az a kijelölt App_Code almappában található. Vegye figyelembe, hogy ha a munkafolyamat-szolgáltatás elsődleges verziója rendelkezik null DefinitionIdentity az előző verziókkal, a rendszer nem fogja hozzáadni. Előfordulhat, hogy egy verzió rendelkezik egy nullDefinitionIdentityverzióval, de ha több verzió is van, akkor az elsődleges verzió nem lehet az, amelyik az előző verzióval nullDefinitionIdentity rendelkezik, vagy az előző verziók nem lesznek hozzáadva a SupportedVersions gyűjteményhez.

Új verzió hozzáadása saját üzemeltetésű munkafolyamat-szolgáltatáshoz

Ha új verziót ad hozzá egy saját üzemeltetésű munkafolyamat-szolgáltatáshoz, az WorkflowServiceHost a munkafolyamat-szolgáltatás elsődleges verziójával van konfigurálva, és a korábbi verziókat explicit módon hozzá kell adni a SupportedVersions gyűjteményhez. Az alábbi példában a rendszer egy WorkflowServiceHost munkafolyamat-definíciót használó MortgageWorkflowV2 elsődleges munkafolyamat-szolgáltatással van konfigurálva, és hozzáad egy munkafolyamat-definícióval MortgageWorkflowV1 konfigurált munkafolyamat-szolgáltatást a SupportedVersions gyűjteményhez. Minden munkafolyamat-szolgáltatás egyedi DefinitionIdentity módon van konfigurálva, amely a munkafolyamat-definíció verzióját tükrözi.

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