Сбой рабочего процесса Sharepoint после обновления решения
У меня работает рабочий процесс, который использует как Parallell, так и OnTaskCreated Activity. Решение было развернуто на нескольких клиентах, недавно я работал над обновлением, которое требовало замены сборки рабочего процесса. У меня было несколько запущенных экземпляров рабочих процессов на сервере, когда я делал обновление.
С тех пор ничего не работает, я не могу получить новый рабочий процесс, заканчивающийся нормально. Я всегда получаю эту ошибку здесь:
01/14/2010 16:14:33.73 w3wp.exe (0x1928) 0x2514 Windows SharePoint Services Workflow Infrastructure 936l High Engine RunWorkflow: System.Workflow.Activities.EventDeliveryFailedException: Event "OnTaskChanged" on interface type "Microsoft.SharePoint.Workflow.ITaskService" for instance id "7697ee64-7286-46f3-992e-cf3c18731f15" cannot be delivered. ---> System.NullReferenceException: Object reference not set to an instance of an object. at Microsoft.SharePoint.Workflow.SPWorkflowHostServiceBase.LoadInstanceData(Guid instanceId, Boolean& compressedData) at Microsoft.SharePoint.Workflow.SPWinOePersistenceService.LoadWorkflowInstanceState(Guid instanceId) at System.Workflow.Runtime.WorkflowRuntime.InitializeExecutor(Guid instanceId, CreationContext context, WorkflowExecutor executor, WorkflowInstance workflowInstance) at System.Workflow.Runtime.WorkflowRuntime.Load(Guid key, CreationCont...
01/14/2010 16:14:33.73* w3wp.exe (0x1928) 0x2514 Windows SharePoint Services Workflow Infrastructure 936l High ...ext context, WorkflowInstance workflowInstance) at System.Workflow.Runtime.WorkflowRuntime.GetWorkflow(Guid instanceId) at System.Workflow.Activities.WorkflowMessageEventHandler.EventHandler(Object sender, ExternalDataEventArgs eventArgs) --- End of inner exception stack trace --- at System.Workflow.Activities.WorkflowMessageEventHandler.EventHandler(Object sender, ExternalDataEventArgs eventArgs) at Microsoft.SharePoint.Workflow.SPWinOETaskService.RaiseEvent(SPWinOeWorkflow workflow, SPWorkflowEvent workflowEvent, Object workItem, IPendingWork workHandler) at Microsoft.SharePoint.Workflow.SPWinOeHostServices.Send(SPWinOeWorkflow winoeworkflow, SPWorkflowEvent e) at Microsoft.SharePoint.Workflow.SPWinOeEngine.RunWorkflow(Guid trackingId, SPWorkflowHostService ho...
01/14/2010 16:14:33.73* w3wp.exe (0x1928) 0x2514 Windows SharePoint Services Workflow Infrastructure 936l High ...st, SPWorkflow workflow, Collection`1 events, TimeSpan timeOut)
Я погуглил проблему и нашел несколько решений, где люди советуют прекратить все экземпляры рабочего процесса до того, как будет выполнено обновление. На мой взгляд, это решение неприемлемо, потому что у меня может быть неуправляемое количество запущенных рабочих процессов.
Мне было интересно, может ли это быть связано с хостом рабочего процесса Sharepoint, могу ли я программно прекратить весь запущенный рабочий процесс во время обновления?
У кого-нибудь есть идеи, как я могу решить эту проблему?
1 ответ
Вы должны были выслушать этих людей или, по крайней мере, самим выяснить, почему они так говорят. Они правы, и теперь вы знаете, почему; Вы эффективно испортили все ваши рабочие процессы.
SharePoint сериализует двоичный рабочий процесс в базу данных, когда рабочий процесс неактивен / находится в режиме ожидания и / или ожидает события. Если вы извлекаете сборку, когда она находится в спящем / сериализованном виде, когда инфраструктура размещения WF в sharepoint пытается десериализовать рабочий процесс для ее восстановления, произойдет сбой, потому что изменился целевой тип (потому что вы "обновили" его).
Нет простого способа обновить двоичные рабочие процессы в sharepoint; бок о бок это единственный управляемый способ сделать это. Вы поднимаете версию сборки, создаете новую ассоциацию WF и устанавливаете старые ассоциации wrkflow, чтобы перестать принимать новые запросы. Старые рабочие процессы будут дополнены старым кодом, а новые рабочие процессы будут использовать ваш новый код. Другого пути нет, извини.
-Oisin