Как получить уведомление перед выгрузкой экземпляра рабочего процесса из WorkflowServiceHost после простоя? - PullRequest
0 голосов
/ 07 февраля 2020

Я размещаю большой сервис рабочего процесса внутри WF4 WorkflowServiceHost, выгрузка которого настраивается через несколько часов:

   <workflowIdle timeToUnload="08:00:00" timeToPersist="00:00:20" />

Некоторые действия в сервисе поддерживают не-WCF соединения с внешними компонентами, которые должны быть уведомляется до того, как рабочий процесс полностью выгружен. Поэтому мне нужно «подключиться» к разгрузке, которая инициируется WorkflowServiceHost после простоя. Мы уже добавили PersistenceParticipant, но он здесь бесполезен, так как он вызывается только во время сохранения или возобновления, не при выгрузке (в моем случае после 8-часового простоя).

В WF3 произошло событие WorkflowRuntime.WorkflowUnloaded с гарантированным поведением синхронизации:

Механизм выполнения рабочего процесса вызывает событие WorkflowUnloaded после успешного сохранения состояния экземпляра рабочего процесса, но до того, как экземпляр недействителен в памяти.

Как мне добиться чего-то похожего с WF4?

Я знаю о пользовательских участниках отслеживания , где я могу получить запись отслеживания "Unloaded". Но я предполагаю, что это полностью асинхронно, поэтому я не могу полагаться на то, что мои состояния активности все еще доступны в памяти, когда вызывается метод Track().

Оптимальным решением было бы какое-то поведение, такое как PersistenceParticipant, но позвонил прямо перед разгрузкой. Это существует, или это легко создать?

...