18

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

我怎样才能通过它?

编辑:我的断点没有被命中

4

11 回答 11

10

迟到的回复,但如果您没有找到较早的答案,它可能会起作用。

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

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

通过右键单击 ashx VS 将显示 View Markup 选项,确保 Class 属性没有引用旧的处理程序。

<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs"
    Class="mynamespace.MyOldHandler" %>
于 2012-09-17T16:59:21.593 回答
6

我遇到了这个问题,结果发现 ashx 文件没有编译。我猜它们是在运行时编译的,因为在那之前我没有收到编译错误。此外,我没有看到指示 HttpCompileException 的黄屏死机,因为:

  • 我最初打算修复 asxh 文件中的错误。
  • 我对文件进行了更改以修复错误,其中我在不知不觉中引入了编译错误。
  • 我测试了错误修复,得到了我在自定义错误中配置的通用友好异常。
  • 我认为这与我修复的错误相同,因为我看不到真正的异常(死机黄屏),也没有费心检查ELMAH
  • 我设置了一个断点,但无法弄清楚为什么它没有被击中。

最终,我确实看到了新引入的异常,修复了编译错误,现在断点正按应有的方式被击中,尽管在最初启动调试器时它没有亮起,而是在调用处理程序时(通过 AJAX 调用在我的情况下)。

于 2009-08-12T18:36:00.813 回答
4

在 Visual Studio 中打开处理程序文件并按照您所说的放置断点。然后在浏览器中加载 Web 应用程序(当然是在调试模式下启动应用程序)。如果断点仍然是灰色并且没有变成黑色,那么您的处理程序可能没有在您的 web 应用程序中正确注册。这主要是问题所在。如果您认为一切都很好,请尝试对整个解决方案进行干净+重建。并将您的项目设置为启动项目(如果您使用多个项目)。通常这已经有所帮助。

于 2009-07-28T13:24:54.447 回答
2

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

于 2009-07-28T13:23:17.087 回答
1

我发现用于调试 Windows 服务的方法也适用于 HTTP Handler:

    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(); 线,等你继续。

于 2014-08-21T15:28:47.363 回答
1

以上方法均不适用于 Visual Studio 2015,但 sorinc 的响应提示我将以下内容添加到处理程序文件开头附近的某处:

System.Diagnostics.Debugger.Break();

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

于 2015-11-24T01:43:31.027 回答
1

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

<system.web>
   <compilation debug="true" />
</system.web>
于 2017-09-29T20:20:02.290 回答
0

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

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

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

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

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

于 2011-06-13T12:44:00.087 回答
0

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

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

于 2011-08-23T20:29:32.720 回答
0

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

例如:

http://localhost/YourSite/YourHandler.ashx
于 2013-05-06T18:56:38.453 回答
-2

在 Visual Studio 中,查看“调试”菜单。在那里,您会找到 Step Into、Step Over 等,根据您的键盘绑定,您通常可以按 F10。

于 2009-07-28T13:19:26.700 回答