ExecutionEngineException для отмены моего рабочего процесса SharePoint 2013

Я использую SharePoint 2013, VS2013 и Workflow Engine 4.5. У меня есть пользовательская страница приложения, которую я использую для следующего шага в моем рабочем процессе. Одна из кнопок на этой странице - кнопка отмены. Когда мои пользователи нажимают эту кнопку, я использую ajax для вызова своего веб-приложения MVC. Мое приложение MVC5.0 Сначала я обновляю свою запись базы данных Entity Framework, а затем пытаюсь отменить рабочий процесс.

Ниже мой код MVC. Почему я получаю сообщение об ошибке ExecutionEngineException в этой строке clientContext.Load(instance); Примечание: если взять приведенный ниже код и скопировать его в консольное приложение, оно работает!

            //cancel the workflow
            ClientContext clientContext = new ClientContext(baseUrl);
            WorkflowServicesManager wfsm = new WorkflowServicesManager(clientContext, clientContext.Web);
            WorkflowInstanceService instanceService = wfsm.GetWorkflowInstanceService();
            WorkflowInstanceCollection instances = instanceService.EnumerateInstancesForListItem(listId, itemId);
            **clientContext.Load(instances);**
            clientContext.ExecuteQuery();

            foreach (WorkflowInstance instance in instances)
            {
                if (instance.Id == new Guid(instanceId))
                {
                    instanceService.CancelWorkflow(instance);
                }
            }

Любая помощь будет оценена.

2 ответа

Я обнаружил, что код CSOM (выше) необходимо заменить следующим кодом. Примечание: мне также пришлось запустить следующий код с повышенными привилегиями.

SPSecurity.RunWithElevatedPrivileges(delegate()
{
   using (SPSite site = new SPSite(baseUrl))
   {
      using (SPWeb web = site.OpenWeb())
      {
         SPList list = web.Lists["Documents"];
         Microsoft.SharePoint.WorkflowServices.WorkflowServicesManager wsm = new Microsoft.SharePoint.WorkflowServices.WorkflowServicesManager(web);
         Microsoft.SharePoint.WorkflowServices.WorkflowInstanceService service = wsm.GetWorkflowInstanceService();
         var instances = service.EnumerateInstancesForListItem(gPageList, pageID);
         foreach (var instance in instances)
         {
            service.CancelWorkflow(instance);
         }
      }
   }                   
 });

Марек:

Я открыл дело с Microsoft (MS). Первоначальный ответ, который они дали, - это то, что они знают о безопасности и других проблемах с SharePoint и MVC5. Я попытался использовать проект службы WCF SharePoint, и получил тот же результат. Я дам вам знать, что я узнаю, когда MS ответит. Что касается Fiddler, я попробовал это, но это мне мало что говорило, или, может быть, я неправильно интерпретировал результаты. Я действительно думал, если я предоставил явные учетные данные (так же, как консольное приложение, которое работает), но получил ту же ошибку.

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