Рабочий процесс Windows не обнаруживает запускаемые экземпляры после вызова действия «Задержка» - PullRequest
0 голосов
/ 18 октября 2019

С прошлой недели у нас возникли проблемы в нашей производственной среде. Каждый раз, когда экземпляр рабочего процесса задерживается, после вызова действия Delay он никогда не возобновляется WF.

Мы работаем с сервисом WF, размещенным в IIS, и нацелены на .NET Framework 4.6.1. Рабочие процессы выполняются долго, и sqlWorkflowInstanceStore представляет собой SQL Server 2014 (SP3-CU3).

Проблема возникает только в производственной среде, где у нас есть 4 разных сервера IIS (владельцы экземпляров), на которых работает наша служба WF. ​​

Когда мы запускаем профиль SQL Server, мы видим, что sp [System.Activities.DurableInstancing]. [DetectRunnableInstances] не вызывается в рабочей среде, однако он вызывается в других средах, где все работает.

Не уверен, что они актуальны, но вот наши параметры конфигурации sqlWorkflowInstanceStore (одни и те же параметры используются во всех средах):

<sqlWorkflowInstanceStore connectionString="Data Source=.;Initial Catalog=WwfPocSQLPersistenceStore;Integrated Security=True;Asynchronous Processing=True" 
                                      instanceEncodingOption="None" 
                                      instanceCompletionAction="DeleteAll" 
                                      instanceLockedExceptionAction="BasicRetry" 
                                      hostLockRenewalPeriod="00:00:30" 
                                      runnableInstancesDetectionPeriod="00:00:02" />
<workflowIdle timeToUnload="0" />

Мы можем видеть все наши неактивные экземпляры в [Система. Activities.DurableInstancing]. [InstancesTable] со столбцом PendingTimer, для которого заданы значения с истекшим сроком действия.

У нас нет ошибок в наших журналах, и я считаю (?), Что ничего не происходит. Но по какой-то причине наше приложение SqlWorkflowInstanceStore не опрашивает базу данных instancestore, чтобы определить, есть ли запущенные экземпляры. В документах я ничего не нашел о том, что могло бы вызвать отсутствие опроса после запускаемых экземпляров.

Я сравнил платформы .NET Framework и версии SQL Server между отказавшими и отсутствующими средами и не обнаружил различий.

Что может быть причиной этого беспорядка, приводящего к краху всей производственной системы?

Кто-нибудь знает, выпустила ли MS код WF с открытым исходным кодом?

1 Ответ

0 голосов
/ 24 октября 2019

Я просто отвечу на свой вопрос, если он кому-нибудь поможет. Конечно, проблема заключалась в поврежденных экземплярах в хранилище экземпляров. Как они были повреждены, неясно, хотя это произошло после развертывания во время большой нагрузки (не рекомендуется). мы воспроизвели ошибку, сначала восстановив резервную копию instancestore на localhost. Затем мы обрезали таблицу [System.Activities.DurableInstancing] .RunnableInstancesTable. Затем мы вручную загрузили экземпляры в [System.Activities.DurableInstancing] .RunnableInstancesTable один за другим, вызвав sp exec [System.Activities.DurableInstancing] .InsertRunnableInstanceEntry. Всякий раз, когда поврежденный экземпляр был загружен, связь с хранилищем хранилища экземпляров, которое можно было увидеть, запустив профилировщик.

Нам потребовалось 4 рабочих дня, чтобы выяснить ..

...