Сбой рабочего процесса 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

Другие вопросы по тегам