В настоящее время я использую WorkFlowServiceHost в сочетании с готовым SqlWorkflowInstanceStore для постоянных целей.Мне нужно знать, когда завершенный экземпляр рабочего процесса действительно был сохранен в базе данных, т.е. мне требуется уведомление сразу после того, как соответствующая строка в [System.Activities.DurableInstancing] .InstancesTable была обновлена с iscompleted = 1
Iунаследовал от класса trackingparticipant и переопределил метод TRACK.
Затем я делаю следующее, чтобы добавить профиль.
Dim instanceQuery As New WorkflowInstanceQuery
instanceQuery.States.Add(WorkflowInstanceStates.Completed)
Dim runCompletedTrackingProfile As New TrackingProfile
runCompletedTrackingProfile.Name = "runCompletedTrackingProfile"
runCompletedTrackingProfile.Queries.Add(instanceQuery)
Dim trackingParticipant As New RunCompletedTrackingParticipant With {.TrackingProfile = runCompletedTrackingProfile}
_CommPayRunWorkFlowServiceHost.WorkflowExtensions.Add(trackingParticipant)
Это все работает нормально, и если я ставлю точку остановав моем классе TrackingParticipant это будет достигнуто в ожидаемое время.ОДНАКО, на данный момент, хотя экземпляр рабочего процесса в памяти ЗАВЕРШЕН, база данных еще не была обновлена.Я предполагаю, что это потому, что постоянный код выполняется в том же потоке, потому что, если я запускаю другой поток в моем отслеживающем участнике, я вижу, что поле 'iscompleted' ОБНОВЛЯЕТСЯ обновленным.
Что является самым элегантнымспособ достижения этого без постоянного опроса базы данных?Я посмотрел на метод .WaitForEvents в хранилище экземпляров, но, похоже, он не делает то, что мне нужно