ExecutionEngineeException用于取消我的SharePoint 2013工作流
我正在使用SharePoint 2013、VS2013和工作流引擎4.5。 我有一个自定义应用程序页面,用于工作流流程的下一步。 此页面上的一个按钮是“取消”按钮。 当我的用户单击此按钮时,我使用ajax调用我的MVC web应用程序。 我的MVC5.0应用程序首先更新实体框架数据库记录,然后尝试取消工作流 下面是我的MVC代码。 为什么我在这一行clientContext.Load(instances)出现ExecutionEngineeException错误; 注意:如果用户使用下面的代码并将其复制到控制台应用程序中,则可以正常工作ExecutionEngineeException用于取消我的SharePoint 2013工作流,sharepoint,executionengineexception,Sharepoint,Executionengineexception,我正在使用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。你能提出其他建议吗?