Как создать настраиваемого участника сохраняемости
Данный раздел относится к версии Windows Workflow Foundation 4.
В следующей процедуре содержаться шаги для создания участника сохраняемости. Реализацию образцов участников сохраняемости см. в образце Участие в сохраняемости и в разделе Расширяемость хранилища.
Создайте класс, который происходит от класса PersistenceParticipant или PersistenceIOParticipant. Класс PersistenceIOParticipant предлагает те же самые точки расширяемости, что и класс PersistenceParticipant, при этом он может принимать участие в операциях ввода-вывода данных. Выполните один или несколько следующих шагов.
Выполните метод CollectValues. Метод CollectValues содержит два словарных параметра, один для хранения значений «запись-чтение» и другой для хранения значений «только запись» (используемых в дальнейшем в запросах). В этом методе необходимо заполнить словари данными, соответствующими участнику сохраняемости. Каждый словарь содержит имя значения в качестве ключа и само значение в качестве объекта InstanceValue.
Значения в словаре readWriteValues упаковываются в виде объектов InstanceValue. Значения в словаре типа «только запись» упаковываются в виде объектов InstanceValue с заданными параметрами InstanceValueOptions.Optional и InstanceValueOption.WriteOnly. Каждый объект InstanceValue, обеспечиваемый реализацией CollectValues для всех участников сохраняемости, должен иметь уникальное имя.
protected virtual void CollectValues (out IDictionary<XName,Object> readWriteValues, out IDictionary<XName,Object> writeOnlyValues)
Выполните метод MapValues. Метод MapValues получает два параметра, схожих с параметрами, получаемыми методом CollectValues. Все значения, собранные на этапе CollectValues, передаются посредством этих словарных параметров. Новые значения, добавленные на этапе MapValues, добавляются как значения типа «только запись». Каждое значение, предоставляемое реализацией метода MapValues для всех участников сохраняемости, должно иметь уникальное имя.
protected virtual IDictionary<XName,Object> MapValues (IDictionary<XName,Object> readWriteValues,IDictionary<XName,Object> writeOnlyValues)
Реализуйте метод PublishValues. Метод PublishValues получает словарь, содержащий все значения, загруженные из хранилища сохраняемости.
protected virtual void PublishValues (IDictionary<XName,Object> readWriteValues)
Реализуйте метод BeginOnSave, если участник является участником ввода-вывода значений сохраняемости. Метод вызывается во время создания сохранения. В этом методе необходимо выполнить дополнительные операции ввода-вывода при сохранении экземпляров рабочих процессов. Если узел использует транзакцию для соответствующей команды сохраняемости, та же самая транзакция используется в Transaction.Current. Помимо этого, PersistenceIOParticipants могут объявить о требовании к совместимости транзакций, в случае чего узел создаст транзакцию для сеанса сохраняемости, если такая транзакция не будет использована иначе.
protected virtual IAsyncResult BeginOnSave (IDictionary<XName,Object> readWriteValues, IDictionary<XName,Object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, Object state)
Реализуйте метод BeginOnLoad, если участник выполняет также операции ввода-вывода. Метод вызывается во время создания загрузки. В этом методе необходимо выполнить дополнительные операции ввода-вывода при загрузке экземпляров рабочих процессов. Если узел использует транзакцию для соответствующей команды сохраняемости, та же самая транзакция используется в Transaction.Current. Помимо этого, участники ввода-вывода данных сохраняемости могут объявить о требовании к совместимости транзакций, в случае чего узел создаст транзакцию для сеанса сохраняемости, если такая транзакция не будет использована иначе.
protected virtual IAsyncResult BeginOnLoad (IDictionary<XName,Object> readWriteValues, TimeSpan timeout, AsyncCallback callback, Object state)