2011-10-31 6 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セキュリティパックCTP 1でユーザー名/パスワード認証を処理するアクティビティがあります。 TokenFlowScopeおよびGetUserNameSecurityTokenを参照してください。この記事で詳しく説明します:http://msdn.microsoft.com/en-us/magazine/gg598919.aspx私はこれを試していないし、可能であればそれを避けるだろう。

2番目の問題として、WorkflowApplicationで実行されるワークフローを偽装する方法がもう少しあります。同じ記事:

ワークフロースレッドのセキュリティコンテキストがワークフロースレッドにコピーされないため、ワークフロークライアントが偽装していても、そのアクティビティを実行しているWFスレッドは実行できません。偽装。呼び出し側のセキュリティコンテキストは、WorkflowInvoker

public class MySyncContext : SynchronizationContext 
{ 
    public override void Post(SendOrPostCallback d, object state) 
    { 
    d(state); 
    } 
} 
で使用される同期コンテキストに似同じ、着信非同期スレッド上でコールを転送しますカスタム同期コンテキストを使用して、WFスレッドに流すことができます
関連する問題