"ImpersonationOption.Required"가있는 WCF 서비스가 있습니다. 병렬 처리를 사용할 때 가장 (impersonation)이 진행되지 않는 것 같습니다. 예 :WCF 병렬 가장
Parallel.ForEach(items => results.Add(SystemUtil.WindowsUser.Name)
가장 된 사용자의 번호와 앱 풀 사용자의 번호를 반환합니다. 병렬 처리가 가능하도록 가장 (impersonation)을 만들 수 있습니까?
최저
,마크
업데이트 :
이것은 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에 들어가도록 설정할 수 있습니까?
감사합니다.
정확하게 코드를 입력하십시오.이 의미가 없습니다. –
정확한 코드로 문제를 업데이트했습니다. – user1582843
이것을 정상으로 다시 작성하십시오. 각 루프 (foreach (timer in timers) {results.Add (WindowsIdentity.GetCurrent (false) .Name;}')에서 문제가 발생합니다. '루프 안에서 동일한 코드를 반복해서 실행하므로 매번 동일한 결과를 얻을 수 있습니다. –