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

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

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

Изменить: моя точка останова не срабатывает


person Ronnie Overby    schedule 28.07.2009    source источник


Ответы (11)


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

person Juri    schedule 28.07.2009
comment
Как зарегистрировать обработчик? Я не думал, что вам нужно регистрировать файлы * .ashx. - person Ronnie Overby; 28.07.2009
comment
см. здесь, чтобы узнать, как зарегистрировать обработчики msdn.microsoft.com /en-us/library/46c5ddfy(VS.80).aspx - person MOZILLA; 28.07.2009
comment
Это то, что я задумал. Вероятно, он не зарегистрирован правильно, и поэтому ваша точка останова никогда не попадает. - person Juri; 28.07.2009
comment
У меня не получилось. Точка останова по-прежнему отмечена красным, поэтому она будет поражена, но это как если бы мой ajax, вызывающий обработчик, не работает правильно - person Ortund; 27.11.2012
comment
Вы отлаживаете с помощью IISExpress или локального сервера IIS? - person Tim; 06.08.2014

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

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

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

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

<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs"
    Class="mynamespace.MyOldHandler" %>
person Giuseppe Romagnuolo    schedule 17.09.2012
comment
Спасибо, @Giuseppe, это исправило для меня, и это то, что легко упустить из виду, особенно при копировании существующего обработчика из другого проекта и забвении обновить свойство Class файла 'Markup', чтобы указать в новое пространство имен. - person Anthony Walsh; 03.11.2013
comment
Большое спасибо за этот ответ, только это мне помогло! - person ; 04.05.2016

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

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

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

person Rex Miller    schedule 12.08.2009
comment
спасибо, что устранили мою проблему. Ошибка компиляции, о которой не сообщается при сборке проекта. - person pauldendulk; 23.10.2012

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

person Jan Aagaard    schedule 28.07.2009
comment
Это всегда моя проблема, когда у меня возникают проблемы с отладкой веб-проектов. По какой-то причине Visual Studio 2013 по умолчанию использует IIS Express ... чего я никогда не хочу! - person Kik; 05.06.2015

Я обнаружил, что метод, используемый для отладки служб 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 (); линия, ожидая продолжения.

person sorinc    schedule 21.08.2014

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

System.Diagnostics.Debugger.Break();

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

person user3594326    schedule 24.11.2015

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

<system.web>
   <compilation debug="true" />
</system.web>
person iCode    schedule 29.09.2017

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

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

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

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

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

person Andy Joiner    schedule 13.06.2011

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

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

person Keith Walton    schedule 23.08.2011

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

Например:

http://localhost/YourSite/YourHandler.ashx
person Dave    schedule 06.05.2013

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

person David Christiansen    schedule 28.07.2009