2010-10-29 11 views
5

Miałem wrażenie, że pliki statyczne (CSS, obrazy, pliki @ font-face, itp.) Całkowicie ominęły ASP.NET i zostały dostarczone bezpośrednio przez IIS.BeginRequest pożary dla plików statycznych w aplikacji ASP.NET MVC

Jednak funkcja obsługi zdarzeń BeginRequest jest wywoływana dla każdego żądania HTTP, w tym dla plików statycznych. Dotyczy to mnie, ponieważ tworzę kontekst danych Entity Framework, który ma być używany przez cały czas trwania każdego żądania w tej procedurze obsługi zdarzeń. Nie chcę tworzyć tych kontekstów, jeśli nigdy nie zostaną użyte.

Używam usług IIS 7 w systemie Windows 7 Ultimate bez zdefiniowania specjalnych odwzorowań obsługi. Czy mam to źle? Czy te wydarzenia powinny wystrzelić?

+0

jako kompletny nowicjusz MVC, czy nie ma podobnej koncepcji do HttpHandler? – brumScouse

+0

Nie jestem zaznajomiony z przypadkami użycia do tworzenia niestandardowych HttpHandlers. Jak w takim przypadku używałbyś jednego? –

+0

Naprawdę nie wiem z MVC. Po prostu próbowałem skierować cię do czegoś, co wiem, zapewnia coś podobnego w (dziedzictwie?) ASP.NET – brumScouse

Odpowiedz

6

Wierzę, że domyślna strona ASP.NET MVC ma ten zestaw w pliku web.config.

<modules runAllManagedModulesForAllRequests="true" /> 

Oznacza to, że każdy moduł .NET zostanie załadowany dla każdego żądania IIS. Jest to wymagane w ASP.NET MVC do obsługi routingu bez rozszerzenia. Jest to zasadniczo mapowanie wieloznaczne, które można napisać w usługach IIS, które pasowałoby do wszystkiego i kierowało je do środowiska ASP.NET, które znajduje się w pliku web.config.

Przeczytaj więcej here, w tym sposób na wyłączenie tego zachowania, jeśli nie korzystasz z .NET 4.0. To jest paskudne, ale jest najczystszym rozwiązaniem dla witryn, które nie radzą sobie z obciążeniem statycznymi plikami obsługiwanymi przez asp.net.

+0

Ten artykuł był doskonałym wyjaśnieniem tego, co się dzieje i dlaczego. Dzięki! –

1

BeginRequest zostanie uruchomiony dla wszystkich żądań (w tym zawartości statycznej), jeżeli:

  • Używasz Visual Studio serwer WWW rozwój.
  • Skonfigurowałeś IIS, aby to zrobić.

Proszę spojrzeć na: http://forums.asp.net/t/1220664.aspx

+0

Spojrzałem - powiedzieli to, co powiedziałeś, tyle że nie pomogło to OP; Podejrzewam, że to nie pomoże OP tutaj albo ... –

+0

Jak powiedziałem w pytaniu, używam IIS 7, nie Cassini, i nie dotknąłem mapowań tresera. Nie sądzę, że usługi IIS są domyślnie skonfigurowane do delegowania żądań zawartości statycznej do ASP.NET, prawda? –

1

oprócz mocowania problem dla statycznych plików, można użyć leniwe inicjowanie Lazy<T> dla ObjectContext: http://msdn.microsoft.com/en-us/library/dd997286.aspx

+0

To faktycznie może zadziałać, ponieważ nie zamierzam wykorzystać kontekstu. Chciałbym się dowiedzieć, dlaczego to wydarzenie jest wystrzeliwane. –

0

Zintegrowany tryb w IIS 7 działa inaczej niż wcześniej.

W razie potrzeby można przełączyć na tryb klasyczny.

Alternatywnie można zdefiniować niestandardową procedurę obsługi trasy i wykonać inicjalizację kontekstu. W ten sposób robi się to tylko dla określonych tras.

Powiązane problemy