Procédure : créer un participant de persistance personnalisé
Cette rubrique s'applique à Windows Workflow Foundation 4.
La procédure suivante permet de créer un participant de persistance. Pour obtenir des exemples d'implémentations de participants de persistance, consultez l'exemple Participating in Persistence (en anglais) et la rubrique Stocker l'extensibilité.
Créez une classe dérivant des classes PersistenceParticipant ou PersistenceIOParticipant. En plus de pouvoir participer aux opérations IO, la classe PersistenceIOParticipant offre les mêmes points d'extensibilité que la classe PersistenceParticipant. Effectuez l'une ou l'ensemble des étapes suivantes :
Implémentez la méthode CollectValues. La méthode CollectValues comprend deux paramètres de dictionnaire : l'un pour le stockage des valeurs accessibles en lecture/écriture et l'autre pour le stockage des valeurs en écriture seule (utilisé ultérieurement dans les requêtes). Dans cette méthode, vous devez remplir ces dictionnaires avec les données propres à un participant de persistance. Chaque dictionnaire contient le nom de la valeur comme clé et la valeur elle-même comme un objet InstanceValue.
Les valeurs du dictionnaire readWriteValues sont fournies comme objets InstanceValue. Les valeurs du dictionnaire en écriture seule sont fournies comme objets InstanceValue avec les valeurs InstanceValueOptions.Optional et InstanceValueOption.WriteOnly définies. Chaque objet InstanceValue fourni par les implémentations CollectValues de l'ensemble des participants de persistance doit avoir un nom unique.
protected virtual void CollectValues (out IDictionary<XName,Object> readWriteValues, out IDictionary<XName,Object> writeOnlyValues)
Implémentez la méthode MapValues. La méthode MapValues prend deux paramètres semblables aux paramètres reçus par la méthode CollectValues. Toutes les valeurs recueillies à l'étape CollectValues sont passées par ces paramètres de dictionnaire. Les nouvelles valeurs ajoutées par l'étape MapValues sont ajoutées aux valeurs en écriture seule. Chaque valeur fournie par les implémentations de la méthode MapValues de l'ensemble des participants de persistance doit avoir un nom unique.
protected virtual IDictionary<XName,Object> MapValues (IDictionary<XName,Object> readWriteValues,IDictionary<XName,Object> writeOnlyValues)
Implémentez la méthode PublishValues. La méthode PublishValues reçoit un dictionnaire contenant toutes les valeurs chargées depuis le magasin de persistance.
protected virtual void PublishValues (IDictionary<XName,Object> readWriteValues)
Implémentez la méthode BeginOnSave si le participant est un participant IO de persistance. Cette méthode est appelée lors d'une opération d'enregistrement. Dans cette méthode, vous devez effectuer l'adjonction IO à la persistance (l'enregistrement) des instances de workflow. Si l'hôte utilise une transaction pour la commande de persistance correspondante, la même transaction est fournie dans Transaction.Current. En outre, les PersistenceIOParticipants peuvent rendre publique une spécification de cohérence transactionnelle. Dans ce cas, l'hôte crée une transaction pour l'épisode de persistance si aucune transaction ne serait utilisée sinon.
protected virtual IAsyncResult BeginOnSave (IDictionary<XName,Object> readWriteValues, IDictionary<XName,Object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, Object state)
Implémentez la méthode BeginOnLoad si le participant est un participant IO de persistance. Cette méthode est appelée lors d'une opération de chargement. Dans cette méthode, vous devez effectuer l'adjonction IO au chargement d'instances de workflow. Si l'hôte utilise une transaction pour la commande de persistance correspondante, la même transaction est fournie dans Transaction.Current. En outre, les participants IO de persistance peuvent rendre publique une spécification de cohérence transactionnelle. Dans ce cas, l'hôte crée une transaction pour l'épisode de persistance si aucune transaction ne serait utilisée sinon.
protected virtual IAsyncResult BeginOnLoad (IDictionary<XName,Object> readWriteValues, TimeSpan timeout, AsyncCallback callback, Object state)