Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A perzisztencia résztvevői részt vehetnek egy alkalmazásgazda által aktivált adatmegőrzési műveletben (Mentés vagy Betöltés). A .NET-keretrendszer 4.6.1-es verziója két absztrakt osztálysal rendelkezik, a PersistenceParticipant és a PersistenceIOParticipant osztályokkal, amelyekkel egy adatmegőrzési résztvevőt hozhat létre. A perzisztens résztvevő ezen osztályok egyikéből származik, megvalósítja a szükséges módszereket, majd hozzáadja az osztály egy példányát a WorkflowExtensions gyűjteményhez a WorkflowServiceHost . Az alkalmazásgazda megkeresheti az ilyen munkafolyamat-bővítményeket a munkafolyamat-példányok megőrzésekor, és megfelelő metódusokat hívhat meg a perzisztencia résztvevőin a megfelelő időpontokban.
Az alábbi lista azokat a feladatokat ismerteti, amelyeket az adatmegőrzési alrendszer a Perzisztencia (Mentés) művelet különböző szakaszaiban hajt végre. A perzisztencia résztvevőit a harmadik és a negyedik szakaszban használják. Ha a résztvevő I/O-résztvevő (az I/O-műveletekben is részt vevő adatmegőrzési résztvevő), a résztvevőt a hatodik szakaszban is használja a rendszer.
Beépített értékeket gyűjt, beleértve a munkafolyamat állapotát, a könyvjelzőket, a megfeleltetett változókat és az időbélyeget.
Összegyűjti a munkafolyamat-példányhoz társított bővítménygyűjteményhez hozzáadott összes adatmegőrzési résztvevőt.
Meghívja az CollectValues összes adatmegőrzési résztvevő által implementált metódust.
Meghívja az MapValues összes adatmegőrzési résztvevő által implementált metódust.
A munkafolyamat megőrzése vagy mentése a tartós tárhelyre.
Meghívja a BeginOnSave metódust az összes tárolási I/O-résztvevőn. Ha a résztvevő nem I/O-résztvevő, a program kihagyja ezt a feladatot. Ha az adatmegőrzési epizód tranzakciós, a tranzakció a Transaction.Current tulajdonságban lesz megadva.
Megvárja, amíg az összes perzisztenciát biztosító résztvevő befejezi. Ha az összes résztvevő sikeresen megőrzi a példányadatokat, véglegesíti a tranzakciót.
A perzisztencia résztvevői a PersistenceParticipant osztályból származnak, és implementálhatják a CollectValues és a MapValues metódusokat . A perzisztencia I/O-résztvevő a PersistenceIOParticipant osztályból származik, és a CollectValues és a MapValues metódus implementálása mellett implementálhatja a BeginOnSave metódust is.
Minden szakasz befejeződik a következő szakasz kezdete előtt. Az értékeket például az első szakasz összes adatmegőrzési résztvevője gyűjti. Ezután az első szakaszban összegyűjtött összes érték meg lesz adva a második szakasz összes adatmegőrzési résztvevőjének a leképezéshez. Ezután az első és a második fázisban összegyűjtött és leképezett összes érték a harmadik szakaszban található adatmegőrzési szolgáltatónak lesz megadva, és így tovább.
Az alábbi lista a terhelési művelet különböző szakaszaiban az adatmegőrzési alrendszer által végrehajtott feladatokat ismerteti. Az kitartó résztvevőket a negyedik szakaszban használjuk. A harmadik szakaszban a perzisztencia I/O-résztvevőit (az I/O-műveletekben szintén részt vevő adatmegőrzési résztvevőket) is használják.
Összegyűjti a munkafolyamat-példányhoz társított bővítménygyűjteményhez hozzáadott összes adatmegőrzési résztvevőt.
Betölti a munkafolyamatot az adatbázisból.
Meghívja a BeginOnLoad az összes tartóssági I/O-résztvevőt, és megvárja, amíg az összes tartóssági résztvevő feladata befejeződik. Ha a perzisztencia epizód tranzakciós, a tranzakció a Transaction.Current fájlban lesz megadva.
Betölti a munkafolyamat-példányt a memóriába a perzisztens tárból lekért adatok alapján.
Minden adatmegőrzési résztvevőn meghívja a PublishValues-t.
A perzisztencia résztvevője a PersistenceParticipant osztályból származik, és implementálhatja a PublishValues metódust . A perzisztencia I/O-résztvevője a PersistenceIOParticipant osztályból származik, és a PublishValues metódus implementálása mellett implementálhatja a BeginOnLoad metódust is.
Munkafolyamat-példány betöltésekor a adatmegőrzési szolgáltató zárolást hoz létre az adott példányon. Ez megakadályozza, hogy a példányt több gazdagép töltse be egy többcsomópontos környezetben. Ha zárolt munkafolyamat-példányt próbál betölteni, a következőhöz hasonló kivétel jelenik meg: "System.ServiceModel.Persistence.InstanceLockException: A kért művelet nem fejezhető be, mert a(z) "0000000-0000-0000-0000-0000-00000-000000000000" példány zárolását nem sikerült beszerezni". Ez a hiba az alábbi esetekben jelentkezik:
Többcsomópontos forgatókönyv esetén a példányt egy másik gazdagép tölti be. Az ilyen típusú ütközések megoldásának többféle módja is van: továbbíthatja a feldolgozást a zárolást és az újrapróbálkozást birtokelő csomópontnak, vagy kényszerítheti a terhelést, amely miatt a másik gazdagép nem tudja menteni a munkáját.
Egy egycsomópontos forgatókönyvben a gazdagép összeomlott. Amikor a gazdagép újra elindul (folyamat-újrafeldolgozás vagy új adatmegőrzési szolgáltató-előállító létrehozása), az új gazdagép megpróbál betölteni egy példányt, amelyet a régi gazdagép zárol, mert a zárolás még nem járt le.
Egy egycsomópontos forgatókönyvben a szóban forgó példány egy ponton megszakadt, és létrejön egy új állandó tárhely szolgáltató példány, amely más házigép-azonosítóval rendelkezik.
A zárolási időtúllépési érték alapértelmezett értéke 5 perc, híváskor Loadmásik időtúllépési értéket adhat meg.