我已经在Visual Studio中的HttpHandler中设置了一个断点。 HttpHandler是一个.ashx文件,我试图通过在VS开发Web服务器中运行我的应用程序进行调试。我的断点是而不是被击中。如何调试ASP.net HTTPHandler
我该如何切入?
编辑:我的断点不击中
我已经在Visual Studio中的HttpHandler中设置了一个断点。 HttpHandler是一个.ashx文件,我试图通过在VS开发Web服务器中运行我的应用程序进行调试。我的断点是而不是被击中。如何调试ASP.net HTTPHandler
我该如何切入?
编辑:我的断点不击中
在Visual Studio中打开处理程序文件并按照所述放置断点。然后在浏览器中加载Web应用程序(当然,以调试模式启动您的应用程序)。如果断点保持灰色,并且不会变成黑色填充,那么您的处理程序可能未在您的Web应用程序中正确注册。这主要是问题。如果根据你的一切都很好,尝试做一个干净的+重建你的整个解决方案。并将您的项目设置为启动项目(如果您使用多个项目)。通常这已经有所帮助。
在Visual Studio中,查看调试菜单。在那里你可以找到Step Into,Step Over等,根据你的键盘绑定,你通常可以打F10。
尝试使用内置的web服务器而不是本地IIS进行调试(如果您使用的是本地IIS,则反之亦然)。这两个Web服务器之间存在细微的差异。
这总是我的问题,当我在调试web项目时遇到困难。出于某种原因,Visual Studio 2013似乎默认为IIS Express ...我从不想要! – Kik 2015-06-05 20:20:15
我有这个问题,事实证明ashx文件没有编译。我猜他们在运行时得到编译,因为直到那时我才得到编译错误。此外,我没有看到黄色的死亡屏幕显示HttpCompileException,因为:
最终,我没有看到新引进的例外,固定的编译错误,现在的断点被击中像它应该,尽管它不亮时,调试器开始启动,而当处理程序调用(在我的情况下通过AJAX调用)。
我在使用IIS进行调试时遇到了同样的问题。
修复: *在IIS中添加处理程序映射:将类型指定为完全限定处理程序类名称(例如MyCompany.MyApp.MyHandler)。
我的web.config也有一个HttpHandlers的元素:
<add verb="*" path="*.p1s" type="MyCompany.MyApp.MyHandler, MyWebService" />
(我的内置组件是MyWebService.dll)
上述方案并没有为我工作。我已经让我的处理程序正确注册了。
我的处理程序是在一个网站项目(而不是一个Web应用程序)。它被另一个网站(测试项目)在同一个Visual Studio解决方案中访问。为了加载调试符号,我将解决方案设置为在启动时启动多个项目。首先我的处理程序,然后是我的测试项目
最新回复,但如果您之前没有找到答案,它可能会有效。
如果您通过复制现有的ashx处理程序来创建您的处理程序,您的问题很可能是您的处理程序的标记文件仍然指向原始处理程序。
默认情况下VS在双击.ashx文件时打开.ashx.cs文件,因为标记文件几乎是不需要的。
通过右键单击ashx VS将显示选项以查看标记,请确保Class属性不是指旧处理程序。
<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs"
Class="mynamespace.MyOldHandler" %>
如果你没有通过你的应用程序中从一个网页访问它来调试HTTP处理程序,试试你的网络浏览器中直接访问处理程序的网址。
例如:
http://localhost/YourSite/YourHandler.ashx
我发现使用调试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();行,等着你继续。
无上述工作对我来说与Visual Studio 2015年不过sorinc的响应避让我添加以下到附近的某处处理程序文件的启动:
System.Diagnostics.Debugger.Break();
调试器然后停在断点我有组。
我尝试了上述几个建议没有任何运气。然后我打开我的web.config,解决方案很明显。我在<system.web>
节点中将<compilation>
节点的debug属性设置为false。一旦我将它设置为true,重新编译,并通过调试启动应用程序,我的断点就被击中了。
<system.web>
<compilation debug="true" />
</system.web>
你如何注册处理程序?我不认为你必须注册* .ashx文件。 – 2009-07-28 13:27:53
看到这个来学习如何注册处理程序http://msdn.microsoft.com/en-us/library/46c5ddfy(VS.80).aspx – MOZILLA 2009-07-28 13:34:41
这就是我的意图。可能它没有正确注册,因此你的断点从未被击中。 – Juri 2009-07-28 13:37:09