Workflow Foundation 4 - 当工作流从延迟活动恢复时,IPrincipal丢失

时间:2012-03-23 22:57:36

标签: c# .net workflow-foundation-4

我有一个使用Business层的工作流(在一个单独的dll中) 此业务层使用IPrincipal角色检查权限,因此工作流活动必须在调用业务层上的方法之前在当前线程上设置Principal。

在延迟活动后恢复wrokflow时我遇到了问题:角色/ IIdentity丢失(或更糟:错误)。

有人知道如何处理这种情况,并确保在恢复时,它会在延迟之前使用IPrincipal设置吗? 或者您对如何管理工作流中的角色有任何想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我的方法是将原始主体存储为工作流变量(在我的例子中为IClaimsPrincipal)。

这有两个好处。

首先,它被持久化,以便如果工作流程持续存在然后恢复,原始主体仍然存在。这也很重要,因为在工作流程恢复时,获得本人的原始上下文可能不再可用。

其次(特别是对于工作流服务),它允许我通过调用另一个服务操作(通过相关实质上是相同的逻辑会话)来检查主体是否继续工作流是与启动会话的用户相同(与变量)。

答案 1 :(得分:0)

可能仍然可以通过OperationContext.Current.ServiceSecurityContext获取身份验证信息 - 以下文章可能会有所帮助:

http://zamd.net/2010/07/04/using-wif-with-workflow-services/ http://msmvps.com/blogs/theproblemsolver/archive/2010/09/21/using-the-wcf-operationcontext-from-a-receive-activity.aspx