2012-03-23 33 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

相關問題