2009-07-28 79 views
16

我已经在Visual Studio中的HttpHandler中设置了一个断点。 HttpHandler是一个.ashx文件,我试图通过在VS开发Web服务器中运行我的应用程序进行调试。我的断点是而不是被击中。如何调试ASP.net HTTPHandler

我该如何切入?

编辑:我的断点击中

回答

3

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

+0

你如何注册处理程序?我不认为你必须注册* .ashx文件。 – 2009-07-28 13:27:53

+0

看到这个来学习如何注册处理程序http://msdn.microsoft.com/en-us/library/46c5ddfy(VS.80).aspx – MOZILLA 2009-07-28 13:34:41

+0

这就是我的意图。可能它没有正确注册,因此你的断点从未被击中。 – Juri 2009-07-28 13:37:09

-1

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

2

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

+0

这总是我的问题,当我在调试web项目时遇到困难。出于某种原因,Visual Studio 2013似乎默认为IIS Express ...我从不想要! – Kik 2015-06-05 20:20:15

6

我有这个问题,事实证明ashx文件没有编译。我猜他们在运行时得到编译,因为直到那时我才得到编译错误。此外,我没有看到黄色的死亡屏幕显示HttpCompileException,因为:

  • 我最初打算修复asxh文件中的一个错误。
  • 我对该文件进行了更改以修复该错误,其中我不知不觉地引入了一个编译错误。
  • 我测试了错误修复,得到了我在自定义错误中配置的通用友好异常。
  • 我认为这是同样的错误我已经进入修复,因为我看不到真正的异常死亡的一拉黄屏,并没有理会检查ELMAH
  • 我设置断点,也不能图为什么它没有被击中。

最终,我没有看到新引进的例外,固定的编译错误,现在的断点被击中像它应该,尽管它不亮时,调试器开始启动,而当处理程序调用(在我的情况下通过AJAX调用)。

0

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

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

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

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

(我的内置组件是MyWebService.dll)

0

上述方案并没有为我工作。我已经让我的处理程序正确注册了。

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

9

最新回复,但如果您之前没有找到答案,它可能会有效。

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

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

通过右键单击ashx VS将显示选项以查看标记,请确保Class属性不是指旧处理程序。

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

如果你没有通过你的应用程序中从一个网页访问它来调试HTTP处理程序,试试你的网络浏览器中直接访问处理程序的网址。

例如:

http://localhost/YourSite/YourHandler.ashx 
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方法,你建立调试并在本地机器上部署。 在Visual Studio中保持项目打开时,当您的网站调用处理程序时,会弹出一个对话框,允许选择该实例。一旦你选择了实例,切换到VS,你会注意到执行在System.Diagnostics.Debugger.Launch();行,等着你继续。

1

无上述工作对我来说与Visual Studio 2015年不过sorinc的响应避让我添加以下到附近的某处处理程序文件的启动:

System.Diagnostics.Debugger.Break(); 

调试器然后停在断点我有组。

0

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

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