4

「ImpersonationOption.Required」を使用したWCFサービスがあります。並列処理を使用すると、なりすましが流れないように見えます。例えば:

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名が返されます。私が得ているのは、「IIS APPPOOL.NET v4.0」の約70%と私です。

IDが常にParallel.ForEachになるように設定するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

2

あなたはそれを自分で世話する必要があります。次のようなものを試してください。

IntPtr token = WindowsIdentity.GetCurrent().Token;

Parallel.ForEach( Enumerable.Range( 1, 100 ), ( test ) =>
{
    using ( WindowsIdentity.Impersonate( token ) )
    {
          Console.WriteLine( WindowsIdentity.GetCurrent( false ).Name );
    }
} );
于 2012-09-26T13:55:28.557 に答える