Web サイトを IIS7.5 にデプロイしたところ、奇妙な動作が 1 つ見つかりました。アプリケーション プール ID をApplicationPoolIdentity
デフォルトのままにしておくと ( IIS Application Pool Identitiesで推奨されているように)、Ninject
非常に作成中に次のエラーが発生するため、無視されているようです。最初のコントローラー:
System.InvalidOperationException: タイプ '..MainController' のコントローラーを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターなしのパブリック コンストラクターがあることを確認します。---> System.DirectoryServices.DirectoryServicesCOMException: 操作エラーが発生しました。
サイト (すべてのサブフォルダーとファイルを含む) を含むフォルダーに権限を付与しようとしFullAccess
ましIIS AppPool\<MySiteAppPool>
たが、何も変更されませんでした。
ただし、アプリケーション プール ID を任意のドメイン アカウントに設定すると (単純なアカウントでも、管理者権限がなく、サイトのフォルダーにアクセスできない場合でも)、正常に動作します。
Ninject は、NuGet パッケージによるMVC3 アプリケーションのセットアップチュートリアルに従ってインストールされます。
関連する場合、サイトはWindows認証を使用してドメインイントラネットで動作するはずです。
したがって、唯一の問題はアプリケーション プール ID にあるようです。推奨される方法を使用したいと考えているApplicationPoolIdentity
限り、ドメイン アカウントではなく を使用したいと考えています。
これは何と接続できますか?これらすべてを混ぜ合わせることは可能ですか?
同様の問題を抱えた SO スレッドを次に示します。ASP.NET MVC 4 + Ninject MVC 3 = No parameterless constructor defined for this object . しかし、そこにも適切な答えはまったくありません。
削除されたコメントが示唆したように、私NetworkSerive
はアイデンティティとして使用してみました。そして、それは適切に機能しました。ただし、これは特権のないドメイン アカウントよりも優れているとは言えません。
編集
突然、別の依存関係が見つかりました。クライアント側のユーザーの資格情報がそこで使用されることを期待していましたが、アプリケーション プール ID は SQL サーバーでの Windows 認証に使用されます。
コメントに基づく
偽装を介して、認証された資格情報を使用してリモート SQL サーバーにアクセスできることに同意します。
ただし、ApplicationPoolIdentity と Ninject の問題が何であるかはまだ明確ではありません。
この質問の一番上にある記事から、仮想アカウントにユーザー プロファイルがないことが原因である可能性があると推測されました。LoadUserProfile
IIS が属性を使用してユーザー プロファイルをロードできるようにすることができるため、この側面は私には不明なままです。仮想アカウントのプロファイルがない場合、IIS は何をロードするのかわかりません。
そこでは次のように言われています。
IIS は Windows ユーザー プロファイルをロードしませんが、特定のアプリケーションはそれを利用して一時データを保存する場合があります。SQL Express は、これを行うアプリケーションの例です。ただし、一時データをプロファイル ディレクトリまたはレジストリ ハイブに格納するには、ユーザー プロファイルを作成する必要があります。NETWORKSERVICE アカウントのユーザー プロファイルはシステムによって作成され、常に使用可能でした。ただし、一意のアプリケーション プール ID に切り替えると、システムによってユーザー プロファイルが作成されなくなります。標準のアプリケーション プール (DefaultAppPool および Classic .NET AppPool) のみがディスク上にユーザー プロファイルを持ちます。管理者が新しいアプリケーション プールを作成した場合、ユーザー プロファイルは作成されません。
ただし、必要に応じて、"LoadUserProfile" 属性を "true" に設定することで、ユーザー プロファイルを読み込むように IIS アプリケーション プールを構成できます。
serverfault.com で次のスレッドを見つけました。
Active Directory のアクセス許可を既定のアプリ プール ID に割り当てるにはどうすればよいですか?
そこには、アプリケーション プール ID がネットワーク サービスとして機能できないこと、特に AD にクエリを実行できないことが記載されています。