你如何调试ASP.net HTTPHandler

时间:2009-07-28 13:17:12

标签: .net asp.net visual-studio debugging httphandler

我在visual studio中的HttpHandler中设置了一个断点。 HttpHandler是我试图通过在VS开发Web服务器中运行我的应用程序来调试的.ashx文件。我的断点被击中。

我该如何逐步完成?

修改:我的断点被击中

11 个答案:

答案 0 :(得分:9)

延迟回复,但如果你没有找到你之前的回答,可能会有用。

如果您通过复制现有的ashx处理程序创建了处理程序,则问题很可能是处理程序的标记文件仍指向原始处理程序。

VS双击.ashx文件时默认打开.ashx.cs文件,因为几乎不需要标记文件。

右键单击ashx VS将显示View Markup选项,确保Class属性不是指旧处理程序。

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

答案 1 :(得分:6)

我遇到了这个问题,结果发现ashx文件没有编译。我想它们是在运行时编译的,因为在那之前我没有得到编译错误。另外,我没有看到黄色死亡屏幕表示HttpCompileException,因为:

  • 我原本打算修复asxh文件中的错误。
  • 我对文件进行了更改以修复错误,其中我在不知情的情况下引入了编译错误。
  • 我测试了错误修复程序,得到了我在自定义错误中配置的通用友好异常。
  • 我认为这是我修复过的同一个错误,因为我无法看到真正的异常黄色死亡屏幕并且没有费心检查ELMAH
  • 我设置了一个断点,并且无法弄清楚为什么它没有被击中。

最终我确实看到了新引入的异常,修复了编译错误,现在断点正在按照它应该被击中,虽然它在调试器最初启动时没有点亮,而是在调用处理程序时(通过在我的案例中是一个AJAX调用。)

答案 2 :(得分:4)

在Visual Studio中打开处理程序文件,然后按照说明放置断点。然后在浏览器中加载Web应用程序(当然,以调试模式启动应用程序)。如果断点保持灰色并且未填充黑色,那么您的处理程序可能未在您的webapp中正确注册。这主要是问题所在。如果根据你的一切都很好,尝试清理+重建整个解决方案。并将您的项目设置为启动项目(如果您正在使用多个项目)。通常这有帮助。

答案 3 :(得分:2)

尝试使用内置的Web服务器而不是本地IIS进行调试(反之亦然,如果您使用的是本地IIS)。两个Web服务器之间存在细微差别。

答案 4 :(得分:1)

以上所有内容都不适用于Visual Studio 2015但是sorinc的响应让我知道如何将以下内容添加到处理程序文件开头附近的某处:

System.Diagnostics.Debugger.Break();

然后调试器在我设置的断点处停止。

答案 5 :(得分:1)

我试了几个上面的建议没有任何运气。然后我打开了我的web.config,解决方案很明显。我在<compilation>节点中将<system.web>节点的debug属性设置为false。一旦我将其设置为true,重新编译,并通过调试启动应用程序,我的断点就被击中了。

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

答案 6 :(得分:0)

使用IIS进行调试时遇到了同样的问题。

修正: *在IIS中添加处理程序映射:将类型指定为完全限定的处理程序类名称(例如,MyCompany.MyApp.MyHandler)。

我的web.config也有一个httpHandlers元素:

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

(我的构建程序集是MyWebService.dll)

答案 7 :(得分:0)

以上解决方案对我不起作用。我已经正确注册了我的处理程序。

我的处理程序位于网站项目(不是Web应用程序)中。它可以在同一个Visual Studio解决方案中由另一个Web站点(测试项目)访问。要获取要加载的调试符号,我将解决方案设置为在启动时启动多个项目。首先是我的处理程序,然后是我的测试项目。

答案 8 :(得分:0)

如果您未能通过从应用内的网页访问http处理程序来调试http处理程序,请尝试直接在Web浏览器中访问处理程序的URL。

例如:

http://localhost/YourSite/YourHandler.ashx

答案 9 :(得分:0)

我发现用于调试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方法中,为Debug构建并在本地计算机上部署。 在Visual Studio中保持项目打开,当您的网站调用处理程序时,将弹出一个对话框,允许选择该实例。选择实例后,切换到VS,您将注意到System.Diagnostics.Debugger.Launch();行,等你继续。

答案 10 :(得分:-2)

在Visual Studio中,查看“调试”菜单。在那里,你会发现Step Into,Step Over等,根据你的键盘绑定,你通常可以点击F10。