Po wdrożeniu moją stronę do IIS7.5 znalazłem jedno dziwne zachowanie: gdy tożsamość puli aplikacji jest pozostawiony być ApplicationPoolIdentity
domyślnie (jak zaleca IIS Application Pool Identities) Ninject
wydaje się być ignorowane, ponieważ pojawia się następujący błąd, gdy tworzenia pierwszego kontrolera:Jak poprawnie skonfigurować tożsamość puli aplikacji IIS 7?
System.InvalidOperationException: wystąpił błąd podczas próby utworzyć kontroler typu „..MainController”. Upewnij się, że kontroler ma publiczny konstruktor bez parametrów. ---> System.DirectoryServices.DirectoryServicesCOMException: Wystąpił błąd operacji .
próbowałem udzielić FullAccess
do IIS AppPool\<MySiteAppPool>
do folderu, zawierający miejsce (w tym wszystkich podfolderów i plików), ale to niczego nie zmienia.
Jednak po ustawieniu tożsamości puli aplikacji na dowolnym koncie domeny (nawet prostym, bez przywilejów administracyjnych, a także bez dostępu do folderu z witryną) działa normalnie.
Ninject jest instalowany zgodnie z tutorialem Setting up an MVC3 application poprzez pakiet NuGet.
Nie jestem pewien, czy jest to istotne, witryna powinna działać w intranecie domeny z uwierzytelnianiem Windows.
Tak więc jedynym problemem wydaje się być tożsamość puli aplikacji. O ile jestem chętny do korzystania z zalecanego sposobu, chciałbym mieć ApplicationPoolIdentity
, a nie konto domeny.
Z czym to może być powiązane? Czy jest możliwe połączenie tych wszystkich elementów razem?
Oto wątek SO z podobnym problemem: ASP.NET MVC 4 + Ninject MVC 3 = No parameterless constructor defined for this object. Nie ma jednak żadnej odpowiedniej odpowiedzi.
Zgodnie z sugestią usuniętą, próbowałem użyć tożsamości NetworkSerive
. I działało poprawnie. Jednak myślę, że to nie jest dużo lepsze, niż nieuprawnione konto domeny.
EDIT
Nagle znalazł inną zależność: tożsamość puli aplikacji służy do uwierzytelniania systemu Windows na serwerze SQL, choć spodziewałem poświadczenia użytkownika po stronie klienta, aby być tam wykorzystywane.
podstawie wypowiedzi
Zgadzam się, że zdalny serwer SQL można uzyskać z uwierzytelnionych poświadczeń za pomocą personifikacji.
Jednak nadal nie jest jasne, jaki jest problem z ApplicationPoolIdentity i Ninject.
Artykuł wspomniany na samym początku tego pytania spowodował, że przypuszczam, że może to być spowodowane faktem, że konto wirtualne nie ma profilu użytkownika. Ten aspekt pozostaje niejasny, ponieważ nadal można włączyć usługi IIS, aby załadować profil użytkownika z atrybutem LoadUserProfile
. Nie mogę uzyskać, co IIS zamierza załadować, jeśli nie ma profilu dla konta wirtualnego?
Mówi się tam:
IIS nie załadować profilu użytkownika systemu Windows, ale niektóre aplikacje może skorzystać z niej w każdym razie do przechowywania danych tymczasowych. SQL Express to przykład aplikacji, która to robi. Profil użytkownika musi jednak zostać utworzony w celu przechowywania tymczasowych danych w katalogu profilu lub w gałęzi rejestru. Profil użytkownika konta NETWORKSERVICE został utworzony przez system i zawsze był dostępny . Jednak dzięki zmianie na unikatowe tożsamości puli aplikacji żaden profil użytkownika nie jest tworzony przez system. Tylko standardowe pule aplikacji (DefaultAppPool i Classic .NET AppPool) mają profile użytkowników na dysku. Żaden profil użytkownika nie zostanie utworzony, jeśli administrator utworzy nową pulę aplikacji.
Jednakże, jeśli chcesz, możesz skonfigurować Pule aplikacji IIS, aby załadować profil użytkownika, ustawiając atrybut "LoadUserProfile" na "true".
znalazłem wątku na serverfault.com:
How can I assign active directory permission to the default app pool identity
Nie jest również powiedziane, że tożsamość puli aplikacji nie jest w stanie pracować jako usługa sieciowa, w szczególności zapytań AD.
Udzieliłeś pełnego dostępu do kogo? – V4Vendetta
@ V4Vendetta Udzieliłem 'FullAccess' na' IIS AppPool \ 'do folderu zawierającego witrynę (w tym wszystkie podkatalogi i pliki). –
horgh
Ok, czy w dziennikach zdarzeń pojawiają się dodatkowe elementy? – V4Vendetta