Skąd IIS wie, czy obsługuje witrynę internetową lub projekt aplikacji internetowej?

Rozumiem, że projekty stron internetowych kompilują źródło w locie, a projekty aplikacji internetowych wstępnie kompilują źródło do biblioteki DLL (podobnie jak ASP.Net 1.x).

Ale jaka jest różnica określona w IIS?

Wiem, że Visual Studio wie - są różne projekty dla każdego itp. Ale uruchomiona instancja (IIS + Framework) ma wiedzieć, który model kompilacji jest używany, prawda? Bo jak inaczej wie czy kompilować czy nie w locie?

Pojawia się żądanie, trafia do pliku ASPX...a skąd proces wie, czy powiązany plik CS musi zostać skompilowany (Strona WWW), czy też został już zrobiony przed wdrożeniem (aplikacja WWW)?

Jestem tylko ciekaw, gdzie ta różnica jest określona. W sieci.config gdzieś?

Author: Deane, 2009-05-07

4 answers

Istnieje subtelna różnica wplik aspx, który znajdziesz w tych typach projektów.

Jeśli spojrzysz na projekt strony internetowej powinieneś zobaczyć coś takiego...

<%@ Page Language="C#" AutoEventWireup="true"  
CodeFile="Default.aspx.cs" Inherits="_Default" %>

... gdzie jak projekt aplikacji webowej będzie miał .pliki aspx z czymś takim...

<%@ Page Language="C#" AutoEventWireup="true" 
CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

Zauważ, że pierwszy ma atrybut CodeFile, a drugi jako atrybut CodeBehind. Tutaj dokonuje się rozróżnienia.

Atrybut CodeBehind nie jest używany podczas wykonywania - jest po to, aby powiedzieć VS.NET gdzie znajduje się kod, a atrybut Inherits informuje runtime, której klasy należy szukać w plikach binarnych.

Atrybut CodeFile jest używany w czasie wykonywania i jest używany przez aspnet_compiler.exe do generowania kodu, a następnie atrybut Inherits jest używany jak powyżej.

Aby uzyskać więcej informacji na temat tych atrybutów, zajrzyj tutaj...

Http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx

Ale aby odpowiedzieć na twoje pytanie "skąd IIS wiedzieć?" odpowiedź brzmi: "nie ma". ASP.NET wie.

Możesz udowodnić, że tak jest, wykonując następujące czynności:

  1. Utwórz nową aplikację internetową. Będzie to miało wartość domyślną.aspx i domyślne.aspx.cs.
  2. Dodaj następujący kod do domyślnego.aspx.cs:

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("hello");
    }
    
  3. Skompiluj projekt, uruchom go, zobacz tekst "cześć" pojawia się w przeglądarce.

  4. Teraz Zmień kod tak, żeby wyglądał w ten sposób, i zapisać .cs plik:

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("goodbye");
    }
    
  5. NIE KOMPILUJ. Odśwież przeglądarkę. Nadal zobaczysz "hello", ponieważ skompilowany kod nadal używa tego ciągu.

  6. Teraz zmień wartość domyślną.aspx z CodeBehind do CodeFile. Zapisz ten plik.

  7. Odśwież przeglądarkę. Zobaczysz "Żegnaj".

  8. Zmień "Żegnaj" w kodzie na " wierzę!". Zapisz .aspx.cs ale nie Kompiluj.

  9. Odśwież przeglądarkę, zobacz "wierzę!", i potańczyć wokół sali :-)

 21
Author: Martin Peck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-07 21:23:17

Wszystko, co IIS robi, to przekazuje przychodzące żądanie do odpowiedniego programu obsługi. W przypadku ASP.NET site / application jest to aspnet_isapi.dll. Następnie opiekun zajmuje się wszystkim stamtąd.

 3
Author: Colin Cochrane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-07 20:22:03

Po skompilowaniu strony internetowej lub webaplikacji nie ma różnicy dla serwera www. Obsługa. NET w IIS zawsze:

  1. Skompiluj strony ASPX.
  2. Jit skonstruowane zespoły w obszarze plików tymczasowych.
  3. Uruchom żądanie

W scenariuszach, w których witryna jest kompilowana w całości w pojedynczą bibliotekę dll, są albo jednoliniowe pliki ASPX informujące programy obsługi. NET w IIS, gdzie uzyskać kod. Lub strony ASPX można usunąć razem z kilkoma dodatkowymi liniami konfiguracyjnymi w sieci.conig.

Ale krótka odpowiedź jest naprawdę raz skompilowane są identyczne.

 1
Author: David McEwing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-07 20:20:46

Jestem prawie pewien, że Framework obsługuje to i jest przezroczysty dla IIS.

 -2
Author: Jimmie R. Houts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-07 20:17:49