2

ASP.NET MVC 3イントラネットアプリケーションは、Windowsユーザー認証を利用し、ユーザーが管理セクション(承認)にアクセスするための特定の役割を持っていることも要求します。これはすべて機能しますが、ユーザーのロールメンバーシップのチェックは非常に遅いことがわかります(約20秒)。User.IsInRoleメソッドまたはのいずれかを使用しますAuthorizeAttribute。ADグループではなくローカルのAdministratorsグループ('BUILTIN \ Administrators')に対してチェックしても、それでも同じくらい遅いです。

さて、ユーザー認証を高速化するために従うことができるいくつかの推奨スキームはありますか?たとえば、ユーザーの認証ステータスをデータベースにキャッシュするのは一般的ですか?より根本的に、ローカルグループ(「管理者」)に対する承認がこれほど遅いので、何か怪しいことが起こっていますか?

編集:

Webサーバーは、Windows 2008 R2 SP1 x64、.NET 4.0、IIS 7.5、4GBRAMで実行されています。ただし、開発マシンでユーザーロールのメンバーシップを照会するのと同じレイテンシーが発生するため、問題はアプリが実行されているマシンとは無関係のようです。ユーザーが「BUILTIN\Administrators」のメンバーであるかどうかのクエリに時間がかかるため、DBMSは重要ではないと思います(問題を単純化するために、このローカルグループをチェックしているだけです)。

4

1 に答える 1

1

内部的には、ASP.NET MVC Windowsユーザー認証は、Webフォームと同じことを行っています。フレームワークMembershipProviderおよびRoleProviderをWebフォームまたはMVCで使用した場合のパフォーマンスの問題については知りません。これをデバッグするために、最も単純なWebフォーム(およびMVC)プロジェクトを作成し、すべての時間が費やされている場所を見つけます。ADサーバーが遅いか、認証の最初の試行がタイムアウトしている可能性があります。

于 2012-07-25T19:23:20.823 に答える