Принудительное удаление рабочего процесса Windows - PullRequest
0 голосов
/ 24 января 2012

У меня довольно большая реализация 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

Этот простой скрипт работает в моемдело.Я просто хотел донести до сообщества, чтобы услышать любые плюсы или минусы этого подхода.

1 Ответ

0 голосов
/ 24 января 2012

Нет проблем с этим. На самом деле AppFabric имеет пункт меню именно для этой цели. Я никогда не проверял, но я предполагаю, что он выполняет команду PowerShell, большинство опций меню делают, и вы можете сделать то же действие, используя команду PS.

...