2011-10-31 46 views
3

我有以下情形:如何模擬在WorkflowApplication內執行的WCF客戶端?

我有工作流應用程序對象運行工作流活動。在工作流活動邏輯中,我調用了一個WCF服務,其中服務操作也作爲一組活動生成。

的問題是:如何憑據傳遞和冒充其他用戶在這種情況下,它這樣做定期:

MyServiceClient client = new MyServiceClient(); 
client.ClientCredentials.Windows.ClientCredential.Domain = domain; 
client.ClientCredentials.Windows.ClientCredential.UserName = username; 
client.ClientCredentials.Windows.ClientCredential.Password = password; 

我試圖模擬運行的工作流應用程序對象的代碼塊,但在這種情況下,我會收到一些異常,說「無法加載文件或程序集....訪問被拒絕」。據我所知,這個例外的原因是工作流應用程序試圖調用原始登錄用戶下的程序集。

請幫忙嗎?

回答

0

使用調用進程的憑據進行Windows身份驗證是受支持的最佳身份驗證方法,但在WF CodePlex站點(https://wf.codeplex.com/releases/view/48114)上的WF Security Pack CTP 1中有處理用戶名/密碼身份驗證的活動。見TokenFlowScopeGetUserNameSecurityToken。本文將詳細介紹它:http://msdn.microsoft.com/en-us/magazine/gg598919.aspx。我沒有嘗試過,如果可能的話,會盡量避免。

對於第二個問題,在WorkflowApplication impersonate下運行工作流還有一點。來自同一篇文章:

調用線程的安全上下文沒有複製到工作流線程,所以即使工作流客戶端正在模擬,正在執行活動的WF線程也不會冒充。來電者的安全上下文可以使用,將其轉發傳入異步線程上調用,類似由WorkflowInvoker

public class MySyncContext : SynchronizationContext 
{ 
    public override void Post(SendOrPostCallback d, object state) 
    { 
    d(state); 
    } 
} 
使用的同步上下文的自定義同步範圍內飛到WF線程