У меня есть служба WCF с "ImpersonationOption.Required". Похоже, что олицетворение не проходит при использовании параллелизма. Например:
Parallel.ForEach(items => results.Add(SystemUtil.WindowsUser.Name)
Возвращает число с олицетворенным пользователем и число с пользователем пула приложений. Можно ли заставить олицетворение работать с параллелизмом?
Лучший,
Марк
Обновление:
Это фактический код на стороне службы IIS.
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string[] WhoAmI(int numOfTests)
{
var tests = new List<int>();
for (var i = 0; i < numOfTests; i++)
tests.Add(i);
var results = new ConcurrentBag<string>();
Parallel.ForEach(tests, (test) => results.Add(WindowsIdentity.GetCurrent(false).Name));
return results.ToArray();
}
Если я передам numOfTests = 10, он порождает 10 задач и возвращает имя WindowsIndentity для каждой задачи. То, что я получаю, это ~ 70% «IIS APPPOOL.NET v4.0» и ~ 30% я.
Как я могу настроить его так, чтобы моя личность всегда попадала в Parallel.ForEach?
Спасибо!
foreach(timer in timers) { results.Add(WindowsIdentity.GetCurrent(false).Name; }
), и вы увидите проблему. Вы никогда ничего не делаете сtimer
внутри цикла, поэтому вы просто выполняете один и тот же код снова и снова, поэтому, конечно, вы получите тот же результат. каждый раз. - person Scott Chamberlain   schedule 25.09.2012