У меня довольно большая реализация Windows Workflow, и мне иногда приходится обновлять рабочий процесс.Время от времени мы сталкиваемся с ситуацией, когда определение рабочего процесса нарушается, и в результате выдается исключение IndexOutOfRangeException.Это не будет проблемой, если WF позволит вам прекратить рабочий процесс, используя методы Terminate () или Abort ().
Есть два решения, о которых я знаю.Первый включает удаление и добавление таблиц Workflow с использованием сценария .SQL, который написал Microsoft.Другой - изменить определение и сохранить его обратно в постоянных таблицах - это очень утомительное занятие и не рекомендуется для слабонервных.
Я хочу знать, есть ли третий вариант, который, возможно, людибоюсь подумать - удаление записей из таблиц dbo.InstanceState и dbo.WorkflowInstance. Ниже приведен скрипт, который сделает свое дело:
DECLARE @WorkflowInstancID uniqueidentifier
-- SET @WorkflowInstancID = <Your friendly, offending Workflow Instance ID>
DELETE FROM dbo.WorkflowInstanceEvent
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.UserEvent
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.ActivityInstance
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.ActivityExecutionStatusEvent
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.InstanceState WHERE uidInstanceID = @WorkflowInstancID
DELETE FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID
GO
Этот простой скрипт работает в моемдело.Я просто хотел донести до сообщества, чтобы услышать любые плюсы или минусы этого подхода.