將我的網站部署到IIS7.5後,我發現了一個奇怪的行爲:默認情況下應用程序池標識爲ApplicationPoolIdentity
(IIS Application Pool Identities中推薦)時,Ninject
似乎被忽略,因爲出現以下錯誤創建第一個控制器:如何正確設置IIS 7應用程序池標識?
System.InvalidOperationException:試圖 當創建 類型的控制裝置發生了錯誤「..MainController」。確保 控制器有一個無參數的公共構造函數。 ---> System.DirectoryServices.DirectoryServicesCOMException:發生操作 錯誤。
我試圖給予FullAccess
到IIS AppPool\<MySiteAppPool>
到文件夾,包含該網站(包括所有子文件夾和文件),但這並沒有改變任何東西。
但是,當我將應用程序池標識設置爲任何域帳戶(即使是簡單的,沒有管理權限,也沒有任何對該站點文件夾的訪問權限)時,它可以正常工作。
Ninject根據Setting up an MVC3 application教程通過NuGet包安裝。
我不確定,如果它是相關的,該網站應該在Windows身份驗證的域Intranet中工作。
所以,唯一的問題似乎與應用程序池的身份。據我急於使用推薦的方式,我喜歡有ApplicationPoolIdentity
,而不是一個域帳戶。
這可以連接什麼?是否有可能將所有這些混合在一起?
下面是一個SO有類似的問題線程:ASP.NET MVC 4 + Ninject MVC 3 = No parameterless constructor defined for this object。然而,在那裏也沒有合適的答案。
作爲建議刪除的評論,我嘗試使用NetworkSerive
作爲身份。它運作正常。但是,我想這比沒有特權的域帳戶好多了。
編輯
突然發現另一相關性:應用程序池標識用於SQL Server上的Windows身份驗證,但筆者預計客戶端用戶的憑據並在那裏使用。
基於評論
同意,遠程SQL Server可以通過模擬的驗證的憑據訪問。
但是,仍然不清楚ApplicationPoolIdentity和Ninject存在什麼問題。
在這個問題的最頂端文章mentiond讓我想,這可能由以下事實造成的,即虛擬賬戶沒有用戶配置文件。這方面仍然不清楚,因爲我們仍然可以啓用IIS來加載具有LoadUserProfile
屬性的用戶配置文件。我無法得到,如果虛擬帳戶沒有配置文件,IIS將加載什麼?
它的存在表示:
IIS不會加載Windows用戶配置文件,但某些應用可能 利用它反正來存儲臨時數據。 SQL Express 是執行此操作的應用程序的一個示例。但是,必須創建用戶 配置文件才能將臨時數據存儲在 配置文件目錄或註冊表配置單元中。網絡服務帳戶 的用戶配置文件是由系統創建的,並始終可用 。但是,通過切換到唯一的應用程序池 身份,系統不會創建用戶配置文件。只有 標準應用程序池(DefaultAppPool和Classic .NET AppPool) 具有磁盤上的用戶配置文件。如果 管理員創建新的應用程序池,則不會創建用戶配置文件。
但是,如果需要,可以通過將「LoadUserProfile」屬性設置爲「true」來將IIS應用程序池配置爲加載 用戶配置文件。
我發現下面的線程上serverfault.com:
How can I assign active directory permission to the default app pool identity
在那裏,它也指出,應用程序池的身份是不能作爲網絡服務工作,特別是查詢AD。
您授予完全訪問權限給誰? – V4Vendetta 2013-03-28 08:32:53
@ V4Vendetta我將'FullAccess'授予'IIS AppPool \'到包含該站點的文件夾(包括所有子目錄和文件) –
horgh
2013-03-28 08:35:15
好吧,你有什麼額外的事件日誌顯示嗎? – V4Vendetta 2013-03-28 08:48:02