Подтвердить что ты не робот

Как отлаживать ASP.net HTTPHandler

Я установил точку останова в HttpHandler в visual studio. HttpHandler - это .ashx файл, который я пытаюсь отлаживать, запустив мое приложение на веб-сервере разработки VS. Моя точка останова не получает удар.

Как я могу пройти через него?

Изменить: моя точка останова не получает удар

4b9b3361

Ответ 1

Откройте файл обработчика в Visual Studio и поместите точку останова, как вы сказали. Затем загрузите веб-приложение в своем браузере (конечно, при запуске приложения в режиме отладки). Если точка останова остается серой и не заполняется черным цветом, ваш обработчик, вероятно, не зарегистрирован должным образом в вашем веб-приложении. Это в основном проблема. Если по вашему мнению все в порядке, попробуйте сделать чистую + перестройку всего вашего решения. И задайте свой проект как проект запуска (если вы используете несколько проектов). Часто это уже помогает.

Ответ 2

Поздний ответ, но он может случиться, если вы не нашли ответ с более ранними.

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

VS по умолчанию открывает файл .ashx.cs при двойном щелчке по файлу .ashx, поскольку файл разметки почти никогда не нужен.

Щелкнув правой кнопкой мыши по элементу ashx VS, вы увидите опцию View Markup, убедитесь, что свойство Class не ссылается на старый обработчик.

<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs"
    Class="mynamespace.MyOldHandler" %>

Ответ 3

У меня была эта проблема, и оказалось, что файл ashx не компилировался. Я думаю, они компилируются во время выполнения, потому что до этого я не получал ошибку компиляции. Кроме того, я не видел Желтый экран смерти, указывающий исключение HttpCompileException, потому что:

  • Я изначально собирался исправить ошибку в asxh файле.
  • Я внес изменения в файл, чтобы исправить ошибку, в которой я неосознанно представил ошибку компиляции.
  • Я протестировал исправление ошибок, получил дружественное к цели исключение, которое я настроил в пользовательских ошибках.
  • Я предположил, что это была ошибка, с которой я столкнулся, потому что я не мог увидеть истинное исключение a la Yellow Screen of Death и не стал проверять ELMAH
  • Я установил точку останова и не мог понять, почему он не попал.

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

Ответ 4

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

Ответ 5

Ни один из вышеперечисленных не работал у меня с Visual Studio 2015, однако ответ соринга заставил меня добавить, чтобы добавить следующее в начало файла обработчика:

System.Diagnostics.Debugger.Break();

Затем отладчик остановился на контрольных точках, которые я установил.

Ответ 6

У меня была такая же проблема при отладке с помощью IIS.

Fix: * Добавить сопоставление обработчика в IIS: укажите тип как ваше полное имя класса обработчика (например, MyCompany.MyApp.MyHandler).

У моего web.config также был элемент httpHandlers:

<add verb="*" path="*.p1s" type="MyCompany.MyApp.MyHandler, MyWebService" />

(где моя сборка была MyWebService.dll)

Ответ 7

Вышеупомянутые решения не сработали для меня. Я уже правильно зарегистрировал обработчик.

Мой обработчик находится в проекте веб-сайта (а не в веб-приложении). К нему обращается другой веб-сайт (тестовый проект) в том же решении Visual Studio. Чтобы загрузить отладочные символы, я установил решение для запуска нескольких проектов при запуске. Сначала мой обработчик, затем мой тестовый проект.

Ответ 8

Если вы не можете отладить обработчик http, обратившись к нему с веб-страницы в своем приложении, попробуйте обратиться к URL-адресу обработчика непосредственно в своем веб-браузере.

например:

http://localhost/YourSite/YourHandler.ashx

Ответ 9

Я обнаружил, что метод, используемый для отладки служб Windows, также работает для обработчика HTTP:

    public void ProcessRequest(System.Web.HttpContext objContext)
    {
// This will automatically launch a dialog that will allow to attach the process to a new or existing instance of Visual Studio
#if DEBUG
     System.Diagnostics.Debugger.Launch();
#endif
[...]

Вы помещаете код выше в свой метод ProcessRequest, который вы создаете для отладки и развертывания на локальном компьютере. Сохранение проекта открыто в Visual Studio, когда ваш сайт вызывает обработчик, появится диалоговое окно, позволяющее выбрать этот экземпляр. После выбора экземпляра переключитесь на VS, и вы заметите, что выполнение выполняется на System.Diagnostics.Debugger.Launch(); line, ожидая продолжения.

Ответ 10

Я попробовал пару вышеупомянутых предложений без везения. Затем я открыл свой web.config, и решение было очевидно. У меня был атрибут отладки <compilation> node установлен на false в <system.web> node. Как только я установил это в true, перекомпилировал и запустил приложение с отладкой, моя точка останова попала.

<system.web>
   <compilation debug="true" />
</system.web>

Ответ 11

В Visual Studio откройте меню Debug. Там вы найдете Step Into, Step Over и т.д., И в зависимости от привязки клавиатуры вы обычно можете нажать F10.