我有以下情况:

我有运行工作流程活动的工作流程应用程序对象。在工作流活动逻辑中,我称为WCF服务,在该服务中,服务操作也作为一组活动生成。

问题是:在这种情况下,我如何传递凭据并模拟其他用户,因为它通常是这样进行的:

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


我试图模拟运行工作流应用程序对象的代码块,但是在那种情况下,我遇到某种异常,说“无法加载文件或程序集...。访问被拒绝”。据我了解,此异常的原因是工作流应用程序正在尝试调用原始登录用户下的程序集。

有什么帮助吗?

最佳答案

使用呼叫过程的凭据的Windows身份验证是受支持的最佳身份验证方法,但是WF CodePlex站点(https://wf.codeplex.com/releases/view/48114)上的WF安全包CTP 1中有一些用于处理用户名/密码身份验证的活动。请参见TokenFlowScopeGetUserNameSecurityToken。本文详细介绍了它: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);
  }
}

关于wcf - 如何模拟在WorkflowApplication中执行的WCF客户端?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7951671/

10-16 22:56