0

SOAPメッセージヘッダーに含まれているSAMLトークンを逆シリアル化するDispatchMessageInspectorがあります。

デシリアライズを行うために、次のコードのバリエーションを使用しています。

List<SecurityToken> tokens = new List<SecurityToken>();

tokens.Add(new X509SecurityToken(CertificateUtility.GetCertificate()));

SecurityTokenResolver outOfBandTokenResolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(new ReadOnlyCollection<SecurityToken>(tokens), true);

SecurityToken token = WSSecurityTokenSerializer.DefaultInstance.ReadToken(xr, outOfBandTokenResolver);

私が見ている問題は、ReadToken呼び出しのパフォーマンスが、Windowsサービス(WCFサービスがホストされている)を実行しているアカウントによって異なることです。

サービスがWindowsドメインアカウントとして実行されている場合、ReadToken呼び出しの経過時間は実質的にゼロです。ローカルマシンアカウントとして実行している場合、呼び出しには200〜1000ミリ秒かかります。

誰かがここで何が起こっているのか、そしてなぜこのコードを実行しているアカウントがそのパフォーマンスに違いをもたらすのかを明らかにすることができますか?

ありがとう、

マーティン

4

1 に答える 1

1

サービスがローカル アカウントで実行されており、かなり多くのアクティビティが発生している場合の例を次に示します。

  • C:\WINDOWS\system32\certcli.dll へのアクセスと使用
  • C:\WINDOWS\system32\atl.dll へのアクセスと使用

  • HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration などのレジストリ キーにアクセスしようとしています

ドメイン アカウントで実行している場合、この余分なアクティビティは発生しないようです。

インターネットで「certcli.dll ドメイン ユーザー」をすばやく検索すると、マイクロソフトのナレッジ ベースの記事 948080 が表示されます。

内部をほとんどまたはまったく制御できない.Netメソッド(WSSecurityTokenSerializer.ReadToken)が最終的に呼び出されているため、これを解決する方法がわかりません。

これも同じ問題を説明しているようです:

http://groups.google.com/group/microsoft.public.biztalk.general/browse_thread/thread/402a159810661bf6?pli=1

于 2010-09-24T14:25:45.153 に答える