ExecutionEngineeException用于取消我的SharePoint 2013工作流

ExecutionEngineeException用于取消我的SharePoint 2013工作流,sharepoint,executionengineexception,Sharepoint,Executionengineexception,我正在使用SharePoint 2013、VS2013和工作流引擎4.5。 我有一个自定义应用程序页面,用于工作流流程的下一步。 此页面上的一个按钮是“取消”按钮。 当我的用户单击此按钮时,我使用ajax调用我的MVC web应用程序。 我的MVC5.0应用程序首先更新实体框架数据库记录,然后尝试取消工作流 下面是我的MVC代码。 为什么我在这一行clientContext.Load(instances)出现ExecutionEngineeException错误; 注意:如果用户使用下面的代码并

我正在使用SharePoint 2013、VS2013和工作流引擎4.5。 我有一个自定义应用程序页面,用于工作流流程的下一步。 此页面上的一个按钮是“取消”按钮。 当我的用户单击此按钮时,我使用ajax调用我的MVC web应用程序。 我的MVC5.0应用程序首先更新实体框架数据库记录,然后尝试取消工作流

下面是我的MVC代码。 为什么我在这一行clientContext.Load(instances)出现ExecutionEngineeException错误; 注意:如果用户使用下面的代码并将其复制到控制台应用程序中,则可以正常工作

            //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);
                }
            }
如有任何帮助,我们将不胜感激。

Marek:

我已与微软(MS)合作立案。他们给出的初步回答是,他们知道SharePoint和MVC5的安全性和其他问题。我尝试使用SharePoint WCF服务项目广告也得到了同样的结果。我会在MS回复时告诉你我发现了什么。至于Fiddler,我试过了,但没有告诉我多少,或者我没有正确解释结果。我真的认为,如果我提供了明确的凭据(与运行的控制台应用程序相同),但出现了相同的错误。

我发现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);
         }
      }
   }                   
 });

我猜,权限很可能是问题-运行MVC应用程序池的帐户没有足够的权限加载这些实例,或者您的凭据存在双跳问题。感谢您的回复。关于权限,您可能是正确的。但是为什么它可以作为控制台应用程序使用呢?您知道如何从clientContext对象设置凭据吗?或者我该如何更改权限?Marek:在我的MVC web应用程序中,我确实显式地设置了凭据,但仍然出现相同的错误。我还确保该用户是所有工作流数据库的数据库所有者。MVC CSOM WorkflowInstanceCollection instances=instanceService.EnumerateInstancesForListItem(listId,itemId)中的代码在此行仍然失败;或者我的JSOM代码var instances=instanceService.EnumerateInstancesForListItem(listId,listItem);你有什么建议吗?你能用显式设置的权限更新或添加代码吗?为了进行测试,您可以尝试将AppPool帐户更改为您的帐户,或者以AppPool帐户的身份运行控制台以检查这是否有效。另外,若你们在不同的服务器上安装了MVC应用程序,那个么你们仍然会遇到双跳问题。无论是否有明确的权限,控制台应用程序都可以正常工作。MVC应用程序没有!我将代码转换为JSOM,但仍然存在相同的问题。此外,我将MVC CSOM代码放在一个try catch中,但是没有调用该catch。你能提出其他建议吗?