Как олицетворять клиента WCF, выполняемого внутри WorkflowApplication? - PullRequest
3 голосов
/ 31 октября 2011

У меня есть следующий сценарий:

У меня есть объект приложения рабочего процесса, выполняющий действие рабочего процесса.В логике действий рабочего процесса я вызываю службу WCF, в которой операции службы также генерируются как набор действий.

Проблема заключается в следующем: как я могу передавать учетные данные и выдавать себя за другого пользователя в этом случае, как его регулярносделано следующим образом:

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

Я пытался олицетворять блок кода, который запускает объект приложения рабочего процесса, но в этом случае я получаю какое-то исключение, говорящее «Не удалось загрузить файл или сборку ...». В доступе отказано".Как я понимаю, причина этого исключения заключается в том, что приложение рабочего процесса пытается вызвать сборку, которая находится под исходным вошедшим пользователем.

Любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 11 ноября 2014

Аутентификация Windows с использованием учетных данных вызывающего процесса является наилучшим поддерживаемым методом аутентификации, но есть действия для обработки аутентификации по имени / паролю в WF Security Pack CTP 1 на сайте WF CodePlex (https://wf.codeplex.com/releases/view/48114). См. 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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...