Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здраствуйте! Долго читал мсдн по теме архитектуры ASP.NET. Написано так: при запросе клиента к серверу, сервер подружает (или компилирует если надо) сборку указанную в заголовке запрошенного aspx. Потом, загрузив сборку, он создает объект Page, инициализирует все его компоненты, ну по ходу дела наступают события типа Load, Init, пользовательские события и т.д. Все это выполняется как надо и потом в самом конце перед выгрузкой, этот объект Page создает html страницу вызывая специальные методы (методы создающие html в Respons'e) своих компонентов (визуальных компонентов). Ну так вот, спрашивается тогда, а зачем в самом файле aspx описывать элементы управления? То есть писать там <asp:Label..... и так далее. Если все эти элементы управления прописаны в классе страницы и код для их отображения тоже производит DLL'ка страницы??? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 09:06 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
2 предположения: 1. часть dll-ки с контролами формируется путем разбора aspx-страницы, на которой эти контролы и объявлены, а это дает возможность визуального дизайна 2. при определенных настройках можно подправить код aspx прямо на рабочем сервере, и dll-ка сама перекомпилится. в dll-ке напрямую так не поправишь ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 09:35 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Артем1, Вы писали: А>2 предположения: А>1. часть dll-ки с контролами формируется путем разбора aspx-страницы, на которой эти контролы и объявлены, а это дает возможность визуального дизайна Ну тут во-первых длл если лежит на сервере, то это уже полноценная сборка, то есть в самом классе страницы УЖЕ определены все контролы, в 2005 студии партиал классы например работают так: программер пишет свой кусок партиал класса в кодебехаинд классе, то есть он пишет чисто методы класса, обработчики событий, ну и может еще свою функциональность добавить. Потом при паблише например, когда студия компилирует класс в сборку, сама студия еще добавляет в этот партиал класс свой код, ну там всякие объявления контролов, кой какие методы и т.д. Это еще не все, потом в этот класс добавляется еще кой какой служебный код и класс переименовывается в имякласса_aspx, и потом он уже компилится в сборку. Короче механизм такой. А>2. при определенных настройках можно подправить код aspx прямо на рабочем сервере, и dll-ка сама перекомпилится. в dll-ке напрямую так не поправишь Ну это понятно, вообще по теме вопроса есть предположение такое: эти объявления контролов в aspx файле нужны для того, чтобы при формировании страницы, которая отсылается клиенту, html код всех контролов находился в нужных местах на странице. Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 09:51 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
А вот такой есть еще вопрос заодно по архитектуре. Когда веб приложение запускается на сервере, начинаются отсылки страниц клиентам и так далее. Но само приложение насколько я понимаю на сервере существует пока последний клиент не закончит с ним работать. Поэтому вопрос такой, можно в веб приложении замутить такую функциональность, чтобы допустим как бы в отдельном потоке что нибудь выполнялось вне зависимости от запросов/ответов пользователей. И например еще круче, сделать так чтобы допустим веб приложение на сервере что то там делало и при определенных обстоятельствах посылало клиенту определенному (или всем клиентам) какую нибудь страницу (то есть посылало её не зависимо от того запрашивал клиент что нибудь или нет)??? Или такого с веб приложениями замутить не получиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 10:02 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>Ну так вот, спрашивается тогда, а зачем в самом файле aspx описывать элементы управления? То есть писать там <asp:Label..... и так далее. Если все эти элементы управления прописаны в классе страницы и код для их отображения тоже производит DLL'ка страницы??? Копать в сторону коллекции Page.Controls рендериться будут только те контролы, которые находятся в этой коллекции. Один из вариантом поместить их в эту коллекцию, как раз прописать в aspx файле. Да и при рендерировки страницы в целом, надо же четко представлять системе в какое место html код какого контрола вставлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 10:17 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Артем1, Вы писали: А>2. при определенных настройках можно подправить код aspx прямо на рабочем сервере, и dll-ка сама перекомпилится. в dll-ке напрямую так не поправишь Не перекомпелиться. Но aspx подправить действительно можно и очень сильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 10:17 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
АнонимА вот такой есть еще вопрос заодно по архитектуре. Когда веб приложение запускается на сервере, начинаются отсылки страниц клиентам и так далее. Но само приложение насколько я понимаю на сервере существует пока последний клиент не закончит с ним работать. Поэтому вопрос такой, можно в веб приложении замутить такую функциональность, чтобы допустим как бы в отдельном потоке что нибудь выполнялось вне зависимости от запросов/ответов пользователей. И например еще круче, сделать так чтобы допустим веб приложение на сервере что то там делало и при определенных обстоятельствах посылало клиенту определенному (или всем клиентам) какую нибудь страницу (то есть посылало её не зависимо от того запрашивал клиент что нибудь или нет)??? Или такого с веб приложениями замутить не получиться? Ну в web-приложении такое действительно сделать вряд-ли возможно. Особенно отсылку клиентам принудительную. Но как вариант можно в Application положить какой-нить поток, который будет себе работу работать потихоньку и туда-же выкладывать переодически инфу о состоянии процесса, а при request-ах клиента проверять эту инфу и выдавать соотв-ее сообщение либо редиректить клиента на нужную страницу. А что это за задача такая, если не секрет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 10:25 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Артем1, Вы писали: А>Ну в web-приложении такое действительно сделать вряд-ли возможно. Особенно отсылку клиентам принудительную. Но как вариант можно в Application положить какой-нить поток, который будет себе работу работать потихоньку и туда-же выкладывать переодически инфу о состоянии процесса, а при request-ах клиента проверять эту инфу и выдавать соотв-ее сообщение либо редиректить клиента на нужную страницу. А что это за задача такая, если не секрет? Ну как таковой задачи сейчас нет, но допустим можно таким образом (с потоком в Application) сделать например такую штуку: Клиент открывает страницу и запрашивает решение какого нибудь сложного уравнения (например), клиенту отправляется страница с сообщением, что решение уравнения началось, зайдите позже. Сервер запускает дополнительный поток в контексте Application и этот поток решает это уравнение, ну к примеру он его будет решать допустим 2 часа, и по ходу решения будут появляться промежуточные результаты и сохраняться в какой нибудь переменной сессии. Ну и клиент сможет периодически захаживать на страницу и смотреть как идет решение. Вот так например =), ну естественно в таком случае у Application на каждого клиента должен быть установлен таймаут несколько часов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 11:02 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Аноним...Ну как таковой задачи сейчас нет, но допустим можно таким образом (с потоком в Application) сделать например такую штуку:... Да, такие задачи именно так и решаются. Под это дело я даже смотрел примеры, кажется, с aspnetmania или gotdotnet - у меня все заработало. google в помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 11:21 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Только там не таймаут огромный выставлялся, а страничка с отображением хода процесса рефрешилась автоматом раз в секунд 10 - и сессия держится, и процесс видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 11:23 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Артем1, Вы писали: А>Только там не таймаут огромный выставлялся, а страничка с отображением хода процесса рефрешилась автоматом раз в секунд 10 — и сессия держится, и процесс видно. А чем плохо в такой ситуации ставить очень большой таймаут? Могут быть проблемы с производительностью или типа того? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 11:52 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>Клиент открывает страницу и запрашивает решение какого нибудь сложного уравнения (например), клиенту отправляется страница с сообщением, что решение уравнения началось, зайдите позже. А>Сервер запускает дополнительный поток в контексте Application и этот поток решает это уравнение, ну к примеру он его будет решать допустим 2 часа, и по ходу решения будут появляться промежуточные результаты и сохраняться в какой нибудь переменной сессии. А>Ну и клиент сможет периодически захаживать на страницу и смотреть как идет решение. А>Вот так например =), ну естественно в таком случае у Application на каждого клиента должен быть установлен таймаут несколько часов. Тут даже таймаут менять не надо. Приложение не умрет, пока оно работает. Хоть два часа, хоть два года. Таймаут срабатывает если быть точным от момента, когда приложения перестало что-то делать. И уж до кучи, можно сохранять состояние расчетов в какой-либо глобальной переменной, или например в БД. И пользователю даже не обязательно держать браузер включенным. А зайдя часика через полтора, идентифицировать его, например, по логину, и показать прогресс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 12:17 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Аноним...А чем плохо в такой ситуации ставить очень большой таймаут? Могут быть проблемы с производительностью или типа того? CyberRussia все хорошо написал. Про то, что приложение не будет выгружено, пока в нем есть активные работающие треды, я не знал. Это правда работает, если мы, к примеру, вызовем асинхронно через делегат метод какого-то своего класса и поместим IAsyncResult в сессию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 13:17 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>Здравствуйте, Артем1, Вы писали: А>>2 предположения: А>>1. часть dll-ки с контролами формируется путем разбора aspx-страницы, на которой эти контролы и объявлены, а это дает возможность визуального дизайна А>Ну тут во-первых длл если лежит на сервере, то это уже полноценная сборка, то есть в самом классе страницы УЖЕ определены все контролы, в 2005 студии партиал классы например работают так: программер пишет свой кусок партиал класса в кодебехаинд классе, то есть он пишет чисто методы класса, обработчики событий, ну и может еще свою функциональность добавить. Потом при паблише например, когда студия компилирует класс в сборку, сама студия еще добавляет в этот партиал класс свой код, ну там всякие объявления контролов, кой какие методы и т.д. Это еще не все, потом в этот класс добавляется еще кой какой служебный код и класс переименовывается в имякласса_aspx, и потом он уже компилится в сборку. Короче механизм такой. Только в клас ничего не добовляеться. Создаеться наследник от него. И он уже имеет название имякласса_aspx. А>>2. при определенных настройках можно подправить код aspx прямо на рабочем сервере, и dll-ка сама перекомпилится. в dll-ке напрямую так не поправишь А>Ну это понятно, вообще по теме вопроса есть предположение такое: эти объявления контролов в aspx файле нужны для того, чтобы при формировании страницы, которая отсылается клиенту, html код всех контролов находился в нужных местах на странице. Или я не прав? Они не прописаны в коде. Точнее они станояться прописаны на момент паблишинга. На момент паблишинга (послденего паблишенга, если вы настроили так штобы можно было редактить аспх файлы, то инфрастуктура асп.нет всерано пропаблишет этот сайт, просто для вас этого будет незаметно), уже не существует аспх странички. Есть пустой файл, он нужен для ИИС. Иначе исс не будет шарить што такой файл вообще сущетсвует. А располжение контролов на этот момент задеться позицией в колекции контролов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 16:59 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>А вот такой есть еще вопрос заодно по архитектуре. А>Когда веб приложение запускается на сервере, начинаются отсылки страниц клиентам и так далее. Но само приложение насколько я понимаю на сервере существует пока последний клиент не закончит с ним работать. Поэтому вопрос такой, можно в веб приложении замутить такую функциональность, чтобы допустим как бы в отдельном потоке что нибудь выполнялось вне зависимости от запросов/ответов пользователей. И например еще круче, сделать так чтобы допустим веб приложение на сервере что то там делало и при определенных обстоятельствах посылало клиенту определенному (или всем клиентам) какую нибудь страницу (то есть посылало её не зависимо от того запрашивал клиент что нибудь или нет)??? А>Или такого с веб приложениями замутить не получиться? Только клиент может запрашивать страничку. Поэтому такие системы сторяться на принципе, когда клиент через какието промежутки времени опрашивает сервер. Ну или еще можно стопить процес хенжлера страницы. Но тогда все зависит от браузера, насколько у него длиный таймаут. Ктомуже второй вариант может использовать тока мазахист. Но я видел и такое. Вобщемто первый вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 17:02 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Mike Chaliy, Вы писали: MC>Они не прописаны в коде. Точнее они станояться прописаны на момент паблишинга. На момент паблишинга (послденего паблишенга, если вы настроили так штобы можно было редактить аспх файлы, то инфрастуктура асп.нет всерано пропаблишет этот сайт, просто для вас этого будет незаметно), уже не существует аспх странички. Есть пустой файл, он нужен для ИИС. Иначе исс не будет шарить што такой файл вообще сущетсвует. А располжение контролов на этот момент задеться позицией в колекции контролов. Не совсем так. Есть много вариантов компиляции (паблиша). Один из них когда от aspx страницы остается только пустой вызов dll, а все уходит во внутренности этой dll. Другой вариант, когда aspx остается как была, а в dll уходит только код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 17:10 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
>Здраствуйте! >Долго читал мсдн по теме архитектуры ASP.NET. Написано так: при запросе клиента к серверу, сервер подружает (или компилирует если надо) сборку указанную в заголовке запрошенного aspx. Потом, загрузив сборку, он создает объект Page, инициализирует все его компоненты, ну по ходу дела наступают события типа Load, Init, пользовательские события и т.д. Все это выполняется как надо и потом в самом конце перед выгрузкой, этот объект Page создает html страницу вызывая специальные методы (методы создающие html в Respons'e) своих компонентов (визуальных компонентов). >Ну так вот, спрашивается тогда, а зачем в самом файле aspx описывать элементы управления? То есть писать там <asp:Label..... и так далее. Если все эти элементы управления прописаны в классе страницы и код для их отображения тоже производит DLL'ка страницы??? >Спасибо. В dll с фоновым кодом Label объявляется так: protected Label lab1; а создается он в dll, которая получается в результате компиляции aspx-страницы. (В 1.1 было так, и сомневаюсь, что в 2.0 по другому). Всего получается две dll с двумя классами, один из них - это MyPage (или как-то еще), наследует от Page (обычно), а второй из них - это MyPage_aspx, который наследует от MyPage. Думаю, понятно, какой класс в какой dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 17:43 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, CyberRussia, Вы писали: CR>Здравствуйте, Mike Chaliy, Вы писали: MC>>Они не прописаны в коде. Точнее они станояться прописаны на момент паблишинга. На момент паблишинга (послденего паблишенга, если вы настроили так штобы можно было редактить аспх файлы, то инфрастуктура асп.нет всерано пропаблишет этот сайт, просто для вас этого будет незаметно), уже не существует аспх странички. Есть пустой файл, он нужен для ИИС. Иначе исс не будет шарить што такой файл вообще сущетсвует. А располжение контролов на этот момент задеться позицией в колекции контролов. CR>Не совсем так. Есть много вариантов компиляции (паблиша). Один из них когда от aspx страницы остается только пустой вызов dll, а все уходит во внутренности этой dll. Другой вариант, когда aspx остается как была, а в dll уходит только код. Вы заметили что я специально оговорил это в скобочках? Когда паблишеться с условием редакитруемых аспх файлов, тогда асп.нет сам "допаблишеват", только уже скрыто от пользователя. Посмотрите в темповой директории асп.нет. Там всегда можно найти "полностью" пропаблишеный сайт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 21:25 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, <Аноним>, Вы писали: А>Когда веб приложение запускается на сервере, начинаются отсылки страниц клиентам и так далее. А>Но само приложение насколько я понимаю на сервере существует пока последний клиент не закончит с ним работать. Application Domain сайта существует пока его не прибъет IIS. Настройки прибивания задаются в IIS в настройках пула (Application pool). А>Поэтому вопрос такой, можно в веб приложении замутить такую функциональность, чтобы допустим как бы в отдельном потоке что нибудь выполнялось вне зависимости от запросов/ответов пользователей. Можно, только не забывай при этом о многопоточности и возможности запуска приложения в WebGarden и WebFarm. Также смотри топик в MSDN Library "ASP.NET Application Life Cycle Overview". А>И например еще круче, сделать так чтобы допустим веб приложение на сервере что то там делало и при определенных обстоятельствах посылало клиенту определенному (или всем клиентам) какую нибудь страницу (то есть посылало её не зависимо от того запрашивал клиент что нибудь или нет)??? На этот вопрос уже ответили. Добавлю, что как вариант можно использовать Atlas, там есть механизмы для периодического опроса сервера.... << RSDN@Home 1.1.4 stable rev. 510>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 21:43 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Mike Chaliy, Вы писали: MC>Только в клас ничего не добовляеться. Создаеться наследник от него. И он уже имеет название имякласса_aspx. The inheritance model for code-behind pages is slightly more complex than that for single-file pages. The model is this: The code-behind file contains a partial class that inherits from a base page class. The base page class can be the Page class, or it can be another class that derives from Page. The .aspx file contains an Inherits attribute in the @ Page directive that points to the code-behind partial class. When the page is compiled, ASP.NET generates a partial class based on the .aspx file; this class is a partial class of the code-behind class file. The generated partial class file contains declarations for the page's controls. This partial class enables your code-behind file to be used as part of a complete class without requiring you to declare the controls explicitly. Finally, ASP.NET generates another class that inherits from the class generated in Step 3. This second generated class contains the code required to build the page. The second generated class and the code-behind class are compiled into an assembly that runs to render output to the browser. Из мсдн ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_aspnetcon/html/01e87387-33f4-45b5-91ec-6c540afe7ee0.htm MC>Они не прописаны в коде. Точнее они станояться прописаны на момент паблишинга. На момент паблишинга (послденего паблишенга, если вы настроили так штобы можно было редактить аспх файлы, то инфрастуктура асп.нет всерано пропаблишет этот сайт, просто для вас этого будет незаметно), уже не существует аспх странички. Есть пустой файл, он нужен для ИИС. Иначе исс не будет шарить што такой файл вообще сущетсвует. А располжение контролов на этот момент задеться позицией в колекции контролов. Как понять существует пустой файл необходимый для IIS? А откуда IIS вообще может узнать какую дллку грузить для этого пустого файла? Как минимум должен быть заголовок в этом файле, где прописано имя дллки. Или уж на крайний случай имя дллки должно совпадать с именем запрошенного aspx. По логике так. А во вторых как этот файл может быть пустым? А хотя бы css классы для каждого контрола где тогда находятся? Тоже в дллке что ли? Так тогда получается что у каждого контрола должно быть миллион дополнительных свойств соответствующих всем аттрибутам типа position: absolute, всякие колоры, и т.д. Или я опять туплю? =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2006, 09:40 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Аноним, Вы писали: А>Здравствуйте, Mike Chaliy, Вы писали: MC>>Только в клас ничего не добовляеться. Создаеться наследник от него. И он уже имеет название имякласса_aspx. MC>>Они не прописаны в коде. Точнее они станояться прописаны на момент паблишинга. На момент паблишинга (послденего паблишенга, если вы настроили так штобы можно было редактить аспх файлы, то инфрастуктура асп.нет всерано пропаблишет этот сайт, просто для вас этого будет незаметно), уже не существует аспх странички. Есть пустой файл, он нужен для ИИС. Иначе исс не будет шарить што такой файл вообще сущетсвует. А располжение контролов на этот момент задеться позицией в колекции контролов. А>Как понять существует пустой файл необходимый для IIS? А откуда IIS вообще может узнать какую дллку грузить для этого пустого файла? Как минимум должен быть заголовок в этом файле, где прописано имя дллки. Или уж на крайний случай имя дллки должно совпадать с именем запрошенного aspx. По логике так. А>А во вторых как этот файл может быть пустым? А хотя бы css классы для каждого контрола где тогда находятся? Тоже в дллке что ли? Так тогда получается что у каждого контрола должно быть миллион дополнительных свойств соответствующих всем аттрибутам типа position: absolute, всякие колоры, и т.д. Или я опять туплю? =) Вообщем: You can precompile a Web site using the ASP.NET compiler tool (ASPNET_Compiler.exe). The tool that provides the following precompilation options: In-place compilation This option performs the same compilation that occurs during dynamic compilation. Use this option to compile a Web site that has already been deployed to a production server. Non-updateable full precompilation Use this to compile an application and then copy the compiled output to the production server. All application code, markup, and UI code is compiled into assemblies. Placeholder files such as .aspx pages still exist so that you can perform file-specific tasks such as configure permissions, but the files contain no updateable code. In order to update any page or any code you must precompile the Web site again and deploy it again. Updateable precompilation This is similar to non-updateable full precompilation, except that UI elements such as .aspx pages and .ascx controls retain all their markup, UI code, and inline code, if any. You can update code in the file after it has been deployed; ASP.NET will detect changes to the file and recompile it. Note that code in a code-behind file (.vb or .cs file) built into assemblies during precompilation, and you therefore cannot change it without going through the precompilation and deployment steps again. Короче первый вариант деплоймента: In-place compilation — просто исходники проекта выкладываются на хостинг (без всяких компиляций) и там после первого запроса клиента они динамически компилятся. Преимущество такого подхода в том что можно прямо на серваке редактировать файлы кода, недостаток в том что при внесении изменений, проект будет пересобран и поэтому клиенту придется ждать пока закончится компиляция прежде чем он получит страницу (только по моему эти задержки не очень и существенны :???: ) Воторой вариант: Короче фишка в том, что есть несколько вариантов деплоймента, один из них Non-updateable full precompilation, при нем весь код страницы помещается в одну сборку длл. Работает это так: сначала апснетом берется кусок партиал класса который написал разработчик, потом к нему приписывается автоматически созданный аспнетом второй кусок этого же партиал класса (в нем объявления контролов, метод InitializeComponents) и в конце к этому классу прибавляется функциональность для вывода маркупа для каждого контрола в соответствии с aspx, потом этот класс переименовывается в имякласса_aspx, компилится и кладется в bin. Преимущества — все работает очень быстро, весь код защищен (условно конечно, если только кулъхацкеръ не имеет пользоваться чем нибудь типа ILDASM). Недостатки — чтобы что то поменять, надо компилить все поновой и выкладывать на сервер, так же если нет исходников то поменять ничего не получится. И третий вариант деплоймента: Похож на второй, только сборки длл содержат код маркупа (markup) только для контролов, а весь остальной маркуп (где какой контрол находится на странице, внутри каких тегов и т.д.) находится в aspx. Преимущество в том, что можно поменять aspx прямо на сервере и например контрол из одного места страницы переместить в другое. Недостатки, хм, ну может быть то, что кульхацкер сможет просмотреть aspx и что то там испортить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2006, 10:30 |
|
||
|
Вопрос по архитектуре ASP.NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, <Аноним>, Вы писали: А>Ну так вот, спрашивается тогда, а зачем в самом файле aspx описывать элементы управления? То есть писать там <asp:Label..... и так далее. Если все эти элементы управления прописаны в классе страницы и код для их отображения тоже производит DLL'ка страницы??? Ну ты вопросы задавать. Даже не знаю с чего начать. Ну, вот так примерно: 1. Надо получить понимание вообще архитектуры веб-приложений: 1.1. все веб-приложения строятся вокруг протокола HTTP. То есть: есть запрос, который клиент отправляет серверу. Сервер обрабатывает этот запрос, и отправляет клиенту ответ. И это все! Никакие два запроса, вообще говоря, не связаны между собой. 1.2. Исторически первое, что придумали технологи веба, были CGI — Common Gateway Interface. Это способ написать свою программу в стиле консольной утилиты: программа получает текст запроса через stdin и отдает текст ответа через stdout. Дополнительные данные, ассоциированные с запросом — IP клиента, HTTP-глагол и прочее — передаются через переменные окружения. 1.3. Есть два основных недостатка модели CGI: производительность и удобство написания. 1.3.1. Производительность страдает из-за того, что каждый запрос подразумевает запуск и исполнение программы. В большинстве ОС это довольно дорогое удовольствие 1.3.2. Удобство написания достаточно низко: приложение должно возвращать не просто текст, а структурированный HTML. Код, отвечающий за оформление смешан с кодом, отвечающим за логику. По исходному коду программы трудно понять вид выходного HTML. 1.4. Для решения проблемы с производительностью, придумали продвинутые протоколы взаимодействия HTTP-сервера и приложения, при которых код обработки запросов не выгружается между запросами, а стоит "в ожидании вызова". Основные решения — сервлеты на джаве и ISAPI расширения в IIS. 1.5. Для решения проблемы с разделением логики и отображения, человечество изобрело Server Pages — технологию, где код помещается внутрь разметки. 1.6. Самые продвинутые технологии построения веб-приложений комбинируют оба подхода: JSP обеспечивает генерацию сервлета по разметке JSP-страницы, аналогичную работу выполняет ASP.NET. Вот мы собственно и добрались до того, что ты рассматриваешь. Секрет в том, что описание элементов управления в aspx позволяет легко управлять структурой страницы: передвинул ты <asp:Label> выше asp:gridview, и все дела. Не надо следить за тем, какой тег когда открылся, кто его закрыл, не надо отслеживать длинные блоки if и все такое. А в классе страницы можно зато поменять, к примеру, способ получения данных для GridView. И не надо следить за тем, по какому объекту делается foreach с выводом <tr>. И при этом мы имеем все преимущества скомпилированного кода: ASP.NET не занимается построчным разбором шаблона на каждый запрос. Вместо этого в памяти лежит откомпилированный код, который эффективно оптимизирован JIT компилятором, и все, что нужно сделать серверу — это передать управление в нужный адрес. Единственный способ ускорить работу ASP.NET приложения — это опустить выполняемый код в режим ядра. Контент, отдаваемый сейчас по старинке — из файлов, имеет шанс никогда не увидеть свет user mode. Все обслуживается драйверами режима ядра, и производительность у них просто сумасшедшая. Отдать 43 байта прозрачной гифки через ASP.NET сейчас во много раз дороже — даже если ASP.NET возьмет весь респонс с хидерами и данными из кэша, само переключение из режима ядра в юзермод и обратно будет стоить намного дороже отправки этих байт в TCP/IP. К сожалению, существующая архитектура винды (разработанная с учетом требований безопасности и устойчивости) не позволяет перенести логику произвольных веб-приложений на уровень ядра, в котором живут драйверы. Я с нетерпением жду выхода на сцену управляемых ОС типа Singularity, где можно избежать переключения между режимами благодаря софтной изоляции процессов. Это будет способом поднять пиковую производительность управляемых веб-приложений примерно в десять-двадцать раз на аналогичном железе. 1.1.4 stable rev. 510 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2006, 19:32 |
|
||
|
|

start [/forum/topic.php?fid=18&tid=1390388]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 327ms |

| 0 / 0 |
