我有以下情况:
我有运行工作流活动的工作流应用程序对象。在工作流活动逻辑中,我调用WCF服务,其中服务操作也作为集合活动生成。
问题是:在这种情况下,我如何传递凭据并模仿其他用户,因为它经常这样做:
MyServiceClient client = new MyServiceClient();
client.ClientCredentials.Windows.ClientCredential.Domain = domain;
client.ClientCredentials.Windows.ClientCredential.UserName = username;
client.ClientCredentials.Windows.ClientCredential.Password = password;
我试图冒充运行工作流应用程序对象的代码块,但在这种情况下,我得到某种异常,说“无法加载文件或程序集......访问被拒绝”。据我了解,此异常的原因是工作流应用程序正在尝试调用原始登录用户下的程序集。
请帮忙吗?
答案 0 :(得分: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。我没有试过这个,如果可能的话会避免它。
对于您的第二个问题,在WorkflowApplication模拟下运行工作流程还有一些问题。来自同一篇文章:
调用线程的安全上下文不会复制到工作流线程,因此即使工作流客户端模拟,正在执行活动的WF线程也不会被模拟。调用者的安全上下文可以使用自定义同步上下文飞到WF线程,该上下文将在相同的传入异步线程上转发调用,类似于WorkflowInvoker使用的同步上下文
public class MySyncContext : SynchronizationContext
{
public override void Post(SendOrPostCallback d, object state)
{
d(state);
}
}