Как распознать веб-приложение? - PullRequest
3 голосов
/ 29 июня 2010

Мне задавали этот вопрос в интервью ...

1. Как узнать, какое веб-приложение мы запрашиваем?на каком языке?

Кто-нибудь может объяснить их подробнее ...

Ответы [ 3 ]

8 голосов
/ 29 июня 2010

Я не собираюсь охватывать территорию того, что такое веб-приложение, потому что это не ваш вопрос, поэтому в этом ответе я буду использовать термины веб-приложение или виртуальный каталог взаимозаменяемые. Если вы хотите узнать больше о том, что такое веб-приложение в IIS, то эта статья с официального сайта MS по IIS: Общие сведения о сайтах, приложениях и виртуальных каталогах в IIS 7 быть полезным. Хотя в названии написано IIS7, оно также углубляется в IIS6.


Какое веб-приложение мы запрашиваем

Проще говоря, в запрос, отправляемый на сервер, включен виртуальный каталог, или IIS уже будет настроен для сопоставления запроса с конкретным виртуальным каталогом. Если ваш запрошенный URL выглядит следующим образом:

http://someServer/myWebSite/default.aspx

тогда часть myWebSite этого URL является виртуальным каталогом, и IIS точно знает, как с этим справиться, потому что он сопоставлен непосредственно с папкой в ​​файловой системе. Но, как я уже сказал, это всего лишь упрощенный подход, который вы, вероятно, используете для доступа к своим собственным веб-приложениям на своем компьютере разработчика или во внутренней сети вашей компании. Существует также другой способ найти виртуальный каталог по URL - с помощью host headers . Когда вы отправляете запрос на веб-сайт (на основе IIS) через Интернет, он, скорее всего, будет размещаться на одном веб-сервере с десятками или даже сотнями других веб-сайтов. В этом случае привязки заголовка хоста используются для сопоставления запроса с конкретным веб-сайтом / веб-приложением. Вы можете прочитать о работе заголовков узлов в этой статье: HOWTO: Основы обработки запросов IIS 6, часть 2. Веб-сайт, виртуальный каталог и веб-приложение .


Язык веб-приложений

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

Если он предварительно скомпилирован, то нет необходимости знать язык страницы, потому что он уже скомпилирован на промежуточный язык MSIL (Microsoft Intermediate Language или, точнее, CIL, Common Intermediate Language ), этот код затем JIT компилируется в собственный код перед выполнением. (JIT-компиляция: простое объяснение , вики-объяснение , чуть более хардкорное объяснение ).

Если веб-приложение было скомпилировано ngen, то оно уже на родном машинном языке и поэтому вообще не нуждается в компиляции.

1 голос
/ 05 июля 2010

Упрощенная версия:

IIS может подключать расширения ISAPI (например, фильтр SSL, фильтр сжатия, PHP, ASP.NET, ...).

1) IIS проверяет запрошенныйURI и отправляет его на расширение, для которого зарегистрирован этот путь URI.ASP.NET по умолчанию регистрирует *.ascx, *.ashx, *.aspx,... путей.*.php пути обычно регистрируются с расширением PHP и т. Д.

2) Теперь ASP.NET получает первый запрос, а класс ApplicationManager создает домен приложения и HostingEnvironmentобъект с информацией и изоляцией для нашего приложения (на основе URI).

3) Базовые объекты инициализируются (Http* как HttpRequest и т. д.)

4) A HttpApplication объект

5) Запросы обрабатываются и возвращают ответ (в случае успеха).

2 - 4 шага выполняются только один раз, и эти объекты находятся в памяти, ожидая других запросов.

1 голос
/ 04 июля 2010

Что касается вопроса № 1, IIS использует то, что он называет метабазой, для отслеживания информации о веб-приложениях, которые он размещает, наряду с множеством другой полезной информации.Метабаза IIS отслеживает любой узел, будь то целый веб-сайт или просто дочерняя виртуальная директория, помеченные как «приложения».Каждое приложение может быть размещено в пуле приложений ... либо по отдельности, либо многие приложения могут совместно использовать один пул.IIS предоставляет множество вариантов управления, включая WMI API, LDAP API, COM API и управляемые API (какие API доступны, зависит от версии IIS ... v7 включает в себя несколько многофункциональных управляемых API, а также обширную поддержку PowerShell.)

Честно говоря, я не думаю, что вопрос № 2 является даже правильным вопросом.Самому IIS не важно, на каком языке что-то написано, поскольку IIS не отвечает за компиляцию чего-либо.Я думаю, это говорит о том, что интервьюер не имеет четкого представления о себе.Также возможно, что этот вопрос был хитрым, с правильным ответом: «IIS не имеет ни возможности, ни необходимости знать тип языка, в который встроено веб-приложение, поскольку IIS не отвечает за компиляцию .NETвеб-сайты. "

Рабочий процесс ASP.NET, с другой стороны, отвечает за компиляцию и выполнение приложений ASP.NET.Язык обычно определяется директивой @Page в верхней части обрабатываемого файла.Компиляция может происходить либо рано, что превращает веб-сайт в сборку .dll вместе с .aspx, .ascx и любыми другими файлами-обработчиками, либо может происходить в реальном времени, что позволяет динамически создавать веб-сайт.Последнее требует, чтобы среда выполнения ASP.NET знала язык компилируемой страницы.

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