从Visual Studio调试HTTP处理程序

O.O*_*.O. 5 c# httphandler visual-studio-2010 visual-studio-debugging

我试图在Visual Studio中调试HTTP处理程序,并且断点没有被击中.有没有人知道如何在Visual Studio中调试HTTP处理程序?

我在Windows 7计算机上使用VS 2010 Premium,.NET 4.0.在我的Web应用程序中,我在/HTTPHandler/TrackingHandler.cs中有一个HTTP处理程序

以下是我的网络配置文件:

<system.webServer>
        <handlers>
            <add name="TrackingHandler" path="/tx/*" verb="*" type="ProjectNamespace.TrackingHandler" resourceType="Unspecified" preCondition="integratedMode" />
        </handlers>
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

我的HTTP处理程序如下所示

namespace ProjectNamespace
{
    public class TrackingHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
             //Breakpoint on the very first line below
             string tracker = Path.GetFileName(context.Request.PhysicalPath);
              .......
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

我使用内置Web服务器Visual Studio Debug中使用任何随机页面启动Web应用程序.然后我手动编辑URL以指向/ tx /目录和之后的一些随机字符串.例如,我当前的URL看起来像http:// localhost:53699/tx/sdfs.我认为这应该在ProcessRequest()的第一行拉出断点, 但事实并非如此.

我会感激任何想法.

OO

编辑:附加信息

项目属性中,在Web选项卡中,我选择了不打开页面.等待来自外部应用程序的请求.我也得到了一个System.Web.HttpException,所以我去了Debug - > Exceptions - > Common Language Runtime并选中了System.Web旁边的框.

以下是我的堆栈跟踪.它似乎没有到达我的处理程序.我在Web配置中是否错误地定义了它?

>   System.Web.dll!System.Web.StaticFileHandler.GetFileInfo(string virtualPathWithPathInfo, string physicalPath, System.Web.HttpResponse response) + 0x1f7 bytes    
    System.Web.dll!System.Web.StaticFileHandler.ProcessRequestInternal(System.Web.HttpContext context = {System.Web.HttpContext}, string overrideVirtualPath) + 0xc7 bytes  
    System.Web.dll!System.Web.DefaultHttpHandler.BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback callback = {Method = {System.Reflection.RuntimeMethodInfo}}, object state = null) + 0x15c bytes   
    System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 0x2d7 bytes    
    System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step = {System.Web.HttpApplication.CallHandlerExecutionStep}, ref bool completedSynchronously = true) + 0xb9 bytes  
    System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception error) + 0x13e bytes  
    System.Web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object extraData) + 0xf8 bytes  
    System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest wr = {Microsoft.VisualStudio.WebHost.Request}) + 0x1a2 bytes  
    System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest wr) + 0x7d bytes  
    System.Web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest wr) + 0x47 bytes  
    WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Request.Process() + 0x17b bytes 
    WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Microsoft.VisualStudio.WebHost.Connection conn = {System.Runtime.Remoting.Proxies.__TransparentProxy}) + 0x6c bytes 
    [Appdomain Transition]  
    WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(object acceptedSocket) + 0x83 bytes   
    mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state) + 0x2d bytes 
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx) + 0xb0 bytes    
    mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() + 0x5a bytes 
    mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch() + 0x147 bytes  
    mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() + 0x2d bytes    
    [Native to Managed Transition]
Run Code Online (Sandbox Code Playgroud)

Cod*_*ter 3

将处理程序发布到其自己的 IIS 应用程序,然后将 Visual Studio连接到 IIS,然后就可以进行调试了。

如果您不想或无法部署到 IIS(在调试 HTTP 处理程序时,我配置构建后脚本以将项目发布到 IIS),您可以通过将项目的启动选项设置为“不”来调试 Cassini打开一个页面”并将 Visual Studio 附加到aspnet_wp.exe.

并且不要忘记以管理员身份运行 Visual Studio,否则附加将不起作用。