• Microsoft .NET
  • ASP.NET
  • Отладка приложения ASP.NET, размещенного на IIS: прикрепление процесса и выяснение, какой процесс прикрепить

Отладка приложения ASP.NET, размещенного на IIS: прикрепление процесса и выяснение, какой процесс прикрепить

ОГЛАВЛЕНИЕ

Данная статья описывает способ отладки приложения, размещенного на IIS. Здесь также описан способ выбора конкретного процесса для прикрепления к вашему приложению, когда выполняются несколько рабочих процессов

Оглавление

  • Обзор
  • Отладка ASP.NETпо сравнению с отладкой IIS
  • Что такое рабочий процесс?
  • Пул приложений
    • Что такое пул приложений?
    • Стандартный пул приложений
    • Создание собственного пула приложений
    • Назначение сайта пулу приложений
  • Как начать?
  • Какой процесс прикрепить?
  • Как прикрепить конкретный рабочий процесс, когда выполняется несколько процессов.
    • Получение списка выполняющихся рабочих процессов
    • Прикрепление нужного процесса
  • Вывод

Обзор

Обычно веб-приложение Asp.Net отлаживается из Visual Studio. Visual Studio имеет собственный механизм ASP.Net, способный запускать и отлаживать веб-сайты внутри visual studio. Но если ваш сайт размещен на IIS, и вы хотите отладить этот сайт, как вы будете его отлаживать? При размещении сайтов на IIS worker process(w3wp.exe) используется для запуска веб-приложения. Надо прикрепить конкретный процесс в Visual Studio, чтобы отлаживать приложение. Данная статья описывает общую идею отладки приложения с помощью прикрепленного процесса. Она также рассматривает рабочий процесс, пул приложений и выбор конкретного процесса, если на IIS выполняется несколько рабочих процессов, с помощью iisapp.vbs. Надеемся, вам понравится эта статья, и вы дадите ценные советы и отзывы.

Отладка ASP.NET по сравнению с отладкой IIS

Visual studio имеет встроенный механизм отладки, отлаживающий код при запуске приложения из Visual Studio. Если при разработке сайтов надо отладить код, ставятся точки останова и производится отладка. [Примечание: В этой статье не описан способ установки режима отладки]. При запуске приложения выполнение кода останавливается, когда приходит определенная точка останова. Это очень просто, поскольку, когда приложение ASP.NET запускается из Visual studio, его контролирует механизм Asp.Net, встроенный в Visual Studio. Если вы хотите проверить, какой процесс запускается для отладки, запустите веб-приложение из Visual Studio и получите такое всплывающее уведомление, как ниже:

Рисунок. Отображение всплывающего уведомления при запуске отладки из Visual Studio

Уведомление  показывает, что процесс запускается для выполнения приложения ASP.NET. Дважды щелкните по иконке. Появится всплывающее окно и покажет характеристики.

Рисунок. Характеристики процесса сервера разработки

За выполняющимся процессом находится "WebDev.WebServer.Exe". При нажатии F5 для запуска этот процесс начинает выполнять приложение Asp.Net. Если вы хотите запустить приложение из командной строки, выполните следующие шаги.

Шаги:
1.    Открыть командную строку Visual Studio
2.    Запустить Webdev.WebServer

Появится следующий экран. Смотрите раздел примеров.

 

Рисунок. Webdev.WebServer

Теперь вернемся к отладке в IIS. IIS появляется при развертывании или размещении сайта на сервере. После развертывания сайтов на IIS, если надо отлаживать сайт из него, нельзя делать это непосредственно в Visual studio. IIS имеет свой собственный рабочий процесс, следящий за выполнением и поддержкой развернутого веб-приложения. Характеристики рабочего процесса описаны в следующем разделе. Поэтому, если мы имеем выполняющийся процесс на IIS, и нам надо отладить приложение, прежде всего надо прикрепить правильный процесс в Visual Studio. Перед разбором способа прикрепления процесса рассмотрим рабочий процесс и пул приложений.

Что такое рабочий процесс?

Рабочий процесс (w3wp.exe) запускает приложение ASP.Net в IIS. Вся функциональность ASP.Net выполняется внутри рабочего процесса. Когда на сервер приходит запрос от клиента, рабочий процесс отвечает за генерацию запроса и ответа. Он также хранит данные сессии InProc. При перезапуске рабочего процесса теряется состояние рабочего процесса. Дополнительную информацию сморите в статье Низкоуровневое рассмотрение архитектуры ASP.NET


Пул приложений

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

 

Стандартный пул приложений

Имя стандартного приложения IIS 6.0 - "DefaultAppPool". После размещения сайта на IIS при проверке свойств Виртуальной директории вы сможете увидеть, что:
1.    Start(пуск) – Run(выполнить) - Inetmgr
2.    Развернуть "DefaultWebSites" или Другие веб-сайты, где вы создали Виртуальную директорию
3.    Щелкнуть правой кнопкой мыши по Виртуальная директория
4.    Щелкнуть по Свойства

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

Чтобы проверить список всех пулов приложений в IIS, разверните Узел пула приложений на сервере IIS.

Рисунок. Стандартный пул приложений

Теперь все до единого пулы приложений должны иметь минимум один рабочий процесс, следящий за работой сайта, связанного с пулом приложений. Щелкните правой кнопкой мыши по пулу приложений – перейдите во вкладку производительности, проверьте нижнюю часть вкладки, там есть раздел сетевого сада, и по умолчанию рабочий процесс равен 1. Пул приложений, содержащий более одного рабочего процесса, называется Web Garden(сетевой сад).

 

Создание и назначение пула приложений

Откройте консоль IIS, щелкните правой кнопкой мыши по папке пула приложений > Создать New(новый)

 

Введите Идентификатор пула приложений и нажмите Ok.

Теперь щелкните правой кнопкой мыши по Виртуальной директории и назначьте только что созданное приложение этой Виртуальной директории.

 

Итак, эти веб-сайты будут запускаться независимо в StateServerAppPool. Следовательно, любая проблема, связанная с другим приложением, не влияет на ваше приложение. Это основные преимущества создания пула приложений отдельно.

Как начать?

Все сказанное до сих пор уже дает вам хорошее представление о рабочем процессе и пуле приложений. Вы должны понять их, прежде чем начинать следующую часть. Теперь покажем способ отладки сайта, размещенного на сервере IIS.

Был создан один веб-сайт под именем sampleWebSite и размещен на локальном IIS. Ниже показан вывод страницы по умолчанию.

 

Рисунок. Пример веб-сайта

Какой процесс прикрепить?

Как уже было сказано, имя процесса - w3wp.exe, следовательно, можно проверить его из менеджера задач, выполняется рабочий процесс или нет

 

Рисунок. Менеджер задач показывает выполняющийся процесс

Теперь прикрепим процесс. Перейдите в Отладка > Прикрепиться к процессу

 

Рисунок. Открыть окно прикрепления процесса

После нажатия на Прикрепиться к процессу появится следующий экран,

 

Рисунок. Выполняется один рабочий процесс

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

Рисунок: 1) Процесс успешно прикреплен 2) Процесс не прикреплен

Заметили ли вы знак точки останова? Если рабочий процесс прикрепился успешно, знак точки останова выполнения кода должен быть четким, в противном случае он должен иметь предупреждающую иконку. Для одного рабочего процесса сценарий не свойствен. Но если на IIS выполняется несколько рабочих процессов, возникает беспорядок. Это рассмотрено в следующем разделе.

Теперь при нажатии на кнопку отладки веб-страницы выполнение кода остановится в точке останова.

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


Как прикрепить конкретный рабочий процесс, когда выполняется несколько процессов?

Когда произойдет этот сценарий? Если несколько сайтов размещены на IIS, и эти сайты имеют там собственный пул приложений. Теперь несколько пулов приложений означают, что выполняется несколько рабочих процессов.

Мы имеем 3 пула приложений в IIS:
•    Стандартный пул приложений
•    Обобщенный пул приложений
•    Пул приложений сервера состояний

Сейчас SampleWebSite связан с defaultAppPool, и мы хотим прикрепить процесс для отладки SampleWebSite. Выполните такой же шаг для открытия окон прикрепления процесса

 

Рисунок. Список рабочих процессов

Посмотрите, рабочий процесс сейчас выполняется, и вам надо прикрепить один из них, но вы не знаете, какой рабочий процесс предназначен для стандартного пула приложений. Вы выбрали любой процесс из них, допустим, ID = 4308, и предположим, что это не рабочий процесс для стандартного пула приложений. Что произойдет, если вы прикрепите неверный процесс? Смотрите рисунок ниже.

 

Рисунок. Процесс не прикрепился правильно

Получение списка выполняющихся рабочих процессов

Ниже даны советы по решению указанной проблемы.
•    Пуск > Выполнить > Cmd
•    Перейти в Windows > System32
•    Выполнить cscript iisapp.vbs и ждать вывода.

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

 

Рисунок. Список выполняющихся рабочих процессов с PID и именем пула приложений

Прикрепление правильного процесса

Отсюда вы можете легко определить имя пула приложений и идентификатор процесса. Снова вернемся в VS > Прикрепить процесс. Теперь вы знаете, что идентификатор процесса для стандартного пула приложений равен 1772, следовательно, Прикрепить процесс.

 

Рисунок. Прикрепить процесс для отладки

Теперь наслаждайтесь отладкой.

Рисунок. Точка останова готова

Вывод

Иногда приходится отлаживать приложение, размещенное на IIS. Для этого надо прикрепить выполняющийся рабочий процесс к коду Visual Studio. Если на сервере IIS выполняется несколько рабочих процессов, мы можем определить правильный рабочий процесс с помощью команды cscript iisapp.vbs. Надеемся, статья поможет новичкам, испытывающим затруднения с отладкой приложения, размещенного на IIS.