2012-03-23 67 views
0

我有一个使用业务层的工作流(在独立的dll中) 此业务层使用IPrincipal角色检查权限,所以工作流活动必须设置Principal在调用业务层上的方法之前在当前线程上。Workflow Foundation 4 - IPrincipal在工作流从延迟活动恢复时丢失

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

是否有人对我如何处理这种情况有所了解,并确保在恢复时使用延迟前的IPrincipal集? 或者您是否对如何管理工作流中的角色有所了解?

谢谢!

回答

1

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

这有两个好处。

首先,它被持续存在,所以如果工作流程被保留下来然后又恢复,那么原始的委托人仍然在那里。这一点也很重要,因为当工作流程恢复时,获得委托人的原始上下文可能不再可用。其次(专门针对工作流服务),它允许我通过调用另一个服务操作(基本上是通过关联的相同逻辑会话)是开始会话的相同用户(与本主题相同的主体变量)。

+0

好主意。我认为校长必须是可序列化的? 工作流程恢复时,您如何自动重新安装校长? – Fabske 2012-03-24 10:58:13

+0

是的,它必须是可序列化的,但它们可能已经是(IClaimsPrincipal至少是)。如果您只是针对工作流变量而不是安全上下文进行编码(无论如何,这可能会是不同的上下文),您无需将其重新安装在任何特定上下文中。 – 2012-03-25 23:54:20

+0

好的。我需要重新安装它,因为dll在CurrentThread上使用IPrincipal,但我会搜索是否有办法自动执行该操作。 – Fabske 2012-03-26 06:39:06

0

认证信息仍然可以通过OperationContext.Current.ServiceSecurityContext-下面的文章可能会有所帮助可供选择:

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

+0

是的,我读过这些帖子。但我不是在谈论一个WCF调用,当工作流从延迟活动恢复时,没有用户/客户端的交互。谢谢你的想法。 – Fabske 2012-03-24 10:57:51

相关问题