我在Visual Studio中的HttpHandler上设置了断点。这个HttpHandler是一个.ashx文件,我正试图通过在VS开发Web服务器中运行我的应用程序来调试它。然而,我的断点却没有被触发。
我该如何逐步调试呢?
编辑:我的断点没有被触发。
我在Visual Studio中的HttpHandler上设置了断点。这个HttpHandler是一个.ashx文件,我正试图通过在VS开发Web服务器中运行我的应用程序来调试它。然而,我的断点却没有被触发。
我该如何逐步调试呢?
编辑:我的断点没有被触发。
回复晚了,但如果之前的回答没有解决你的问题,这可能会有所帮助。
如果你通过复制现有的ashx处理程序创建了自己的处理程序,那么你的问题很可能是你的处理程序的标记文件仍然指向原始处理程序。
默认情况下,VS在双击.ashx文件时打开.ashx.cs文件,因为几乎不需要使用标记文件。
通过右键单击ashx,VS将显示查看标记选项,请确保Class属性不引用旧处理程序。
<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs"
Class="mynamespace.MyOldHandler" %>
在Visual Studio中打开处理程序文件,并按照您所说的设置断点。然后在浏览器中加载Web应用程序(当然要在调试模式下启动应用程序)。如果断点保持灰色并且不变为填充黑色,则您的处理程序可能没有正确注册在Web应用程序中。这通常是问题所在。如果您认为一切都很好,请尝试对整个解决方案进行清理+重建。并将您的项目设置为启动项目(如果您使用多个项目)。通常这已经有所帮助。
尝试使用内置的Web服务器进行调试,而不是本地IIS(如果您正在使用本地IIS,则反之亦然)。两个Web服务器之间存在一些细微差别。
http://localhost/YourSite/YourHandler.ashx
对我来说,上述方法都无法在Visual Studio 2015中使用,然而sorinc的回答启示我在处理程序文件的开头附加以下内容:
System.Diagnostics.Debugger.Break();
<system.web>
节点中,<compilation>
节点的debug属性被设置为false。一旦我将其设置为true,重新编译并启用调试,我的断点就被触发了。<system.web>
<compilation debug="true" />
</system.web>
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
[...]
当我使用IIS进行调试时,遇到了同样的问题。
解决方法: * 在IIS中添加一个处理程序映射:将类型指定为您的完全限定处理程序类名称(例如MyCompany.MyApp.MyHandler)。
我的web.config文件还包含了一个httpHandlers元素:
<add verb="*" path="*.p1s" type="MyCompany.MyApp.MyHandler, MyWebService" />
(我的构建程序集是MyWebService.dll)
WebHandlers
还是HttpHandlers
,它们是两个不同的东西。HttpHandler 是通过 web.config 注册的,而不是与页面一起注册的。 - AaA