Как запускается веб-приложение? Где находится точка входа (если она есть)? - PullRequest
13 голосов
/ 04 января 2011

Я использую IIS для разработки некоторых веб-приложений.Раньше я считал, что каждое приложение должно иметь точку входа.Но, похоже, у веб-приложения его нет.

Я прочитал много книг и статей, посвященных тому, как создать приложение ASP.NET под IIS, но они просто не касаются самой очевидной и основной вещи, которую я хочу знать.

ИтакМожет кто-нибудь сказать мне, как запускается веб-приложение?В чем разница между традиционным настольным приложением и веб-приложением с точки зрения их рабочей парадигмы, такой как логика запуска и завершения.

Большое спасибо.

Обновление - 1 - 23:14 2011/ 1/4

В настоящее время я понимаю:

Когда поступает какой-либо запрос, IIS извлекает URL-адрес, содержащийся в запросе.Я предполагаю, что IIS должен был поддерживать какую-то внутреннюю таблицу, которая отображает URL на соответствующий физический каталог на диске.В качестве примера возьмем следующий URL:

http://myhost/webapp/page1.aspx

С помощью вышеупомянутой внутренней таблицы IIS найдет файл page1.aspx на диске.И затем этот файл проверяется, и файл кода с выделенным кодом находится.И тогда будет создан правильный экземпляр класса страницы, и его методы, определенные в файле code-behind, будут вызваны в предопределенном порядке.Результатом серии вызова метода будет ответ, отправленный клиенту.

Обновление - 2 - 23:32 2011/1/4

URL-адрес - это не что иное, как идентификатор, который служит индексом в вышеупомянутой внутренней таблице .С помощью этого индекса IIS (или любая технология веб-сервера) может найти физическое местоположение ресурса.Затем с некоторой подсказкой (такой как расширение имени файла, например * .aspx), веб-сервер знает, какой обработчик (такой как обработчик ISAPI asp.net) должен использоваться для обработки этого ресурса.Этот выбранный обработчик будет знать, как анализировать и выполнять файл ресурсов.

Так что это также объясняет, почему веб-сервер должен быть расширяемым.

Ответы [ 3 ]

4 голосов
/ 04 января 2011

Это зависит от того, какой язык и рамки вы используете, но в целом существует ряд точек входа, которые будут связаны с HTTP-запросами (например, по URL).Когда сервер получает запрос, который соответствует одной из этих привязок, выполняется связанный код.

Могут также быть различные цепочки фильтров и перехватчики, которые выполняются на основе других условий запроса.Вероятно, будет также некоторый установочный код, который сервер выполняет при запуске.В конечном счете, по-прежнему существует единственная точка входа - функция main () сервера - но с точки зрения веб-приложения важны привязки запросов.

Правка в ответ на правки вопроса

Я никогда не использовал IIS, но я бы предположил, что здесь нет «таблицы поиска», а есть некоторые правила поиска.Я расскажу вам о вызове страницы .jsp на сервере Apache, которая должна быть в основном тем же процессом.

  1. Веб-приложение написано и помещено в файловую систему - например, C: / www/ mywebapp
  2. Для веб-сервера задано правило конфигурации, согласно которому путь URL / webapp / должен быть сопоставлен с C: / www / mywebapp
  3. Веб-сервер также настроен на распознавание.файлы jsp как сервлеты JSP
  4. Веб-сервер получает запрос на /webapp/page1.jsp, он отправляется в рабочий поток
  5. Веб-сервер использует свои правила отображения для определения местоположения C:/www/mywebapp/page1.jsp
  6. Веб-сервер упаковывает код в файл JSP в класс с методом serveRequest(request, response) и компилирует его (если это еще не сделано)
  7. Интернетсервер вызывает функцию serveRequest, которая теперь является точкой входа кода пользователя
  8. Когда код пользователя завершается, веб-сервер отправляет ответ клиенту, и рабочий поток завершается

Это самая базовая система - сервлеты на основе ресурсов (т.е. файлы .jsp или .aspx).Правила связывания становятся намного более сложными при использовании технологий, таких как инфраструктуры MVC, но основные концепции остаются теми же.

1 голос
/ 22 сентября 2011

Подобно тому, что OrangeDog упомянул в своем ответе, есть много всего, что происходит при обслуживании этих страниц, прежде чем вы даже получите свой код.

Не только в asp.net mvc, но и в asp.net в целом есть различные части, которые вступают в игру, когда вы выполняете запрос.

Существует такой код, как модули, обработчики и т. Д., Которые снова выполняют обработку до того, как попадают в код страницы. Кроме того, вы можете сопоставить одну и ту же страницу, чтобы иметь возможность обрабатывать разные URL.

Концепция обработчика в asp.net важна, поскольку существуют различные обработчики, отвечающие за обработку запросов, которые соответствуют расширениям и / или глаголам http (get, head, post). Если вы посмотрите на% systemroot% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config, вы можете увидеть раздел. Вы также можете увидеть обработчики в IIS (их можно изменить на сайте).

Например, HttpForbiddenHandler - это тот, который просто отклоняет запрос. Он настроен для вызова для специальных файлов, таких как источники "* .cs".

Вы можете определить свой собственный обработчик, который является не чем иным, как классом, который реализует интерфейс IHttpHandler. Таким образом, у него есть 2 метода: ProcessRequest и IsReusable. Это больше похоже на вашу программу cgi, так как реализация в основном представляет собой метод, который генерирует HTML или любой другой тип вывода на основе информации в запросе.

Страницы Asp.net основаны на этом и имеют множество дополнительных функций, предназначенных для облегчения разработки страниц. Вы реализуете класс, который наследуется от Page, и с ним связано 2 кодовых файла (.aspx и .cs). То же самое можно сказать и о asp.net mvc, но оно структурировано по-другому. Существует гораздо больше, чем это, если вы хотите воспользоваться этим, вам нужно узнать об этом.

Недостатком этих абстракций является то, что некоторые разработчики теряют понимание контекста, в котором они находятся. Контекст остается прежним, вы создаете приложение, которое принимает запрос и выдает результат. Разница в том, что на месте гораздо больше кода, призванного облегчить его работу.

0 голосов
/ 23 сентября 2011

С точки зрения более подробного списка жизненного цикла запросов IIS ASP.NET, в конвейере HTTPApplication довольно много этапов. Совсем недавно был хороший пост в блоге, который, как мне показалось, кратко и кратко излагал их. Это «События жизненного цикла HTTP-запросов в конвейере IIS, которые должен знать каждый разработчик ASP.NET» от Супротима Агарвала .

Для более подробного объяснения вам следует проверить статью MSDN по теме . Это также поможет узнать, что происходит до этого конвейера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...