5 Stimmen

Debuggen eines HTTP-Handlers von Visual Studio aus

Ich versuche ein Debugging einer HTTP-Handler in Visual Studio und der Breakpoint wird nicht getroffen. Hat jemand eine Idee, wie man über das Debuggen von HTTP-Handlern in Visual Studio gehen?

Ich verwende VS 2010 Premium , .NET 4.0 in einem Windows 7 Maschine. In meiner Webanwendung habe ich einen HTTP-Handler in /HTTPHandler/TrackingHandler.cs

Das Folgende steht in meinem Web-Konfiguration Datei:

<system.webServer>
        <handlers>
            <add name="TrackingHandler" path="/tx/*" verb="*" type="ProjectNamespace.TrackingHandler" resourceType="Unspecified" preCondition="integratedMode" />
        </handlers>
  </system.webServer>

Mon HTTP-Handler sieht wie folgt aus

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);
              .......
         }
     }
}

Ich starte meine Webanwendung über eine beliebige Seite in Visual Studio Fehlersuche unter Verwendung der eingebauter Webserver . Dann bearbeite ich die URL so, dass sie auf die Verzeichnis /tx/ und eine zufällige Zeichenfolge danach. Meine aktuelle URL sieht zum Beispiel so aus http://localhost:53699/tx/sdfs . Ich dachte, dies sollte den Haltepunkt in der ersten Zeile von ProcessRequest() aber das tut sie nicht.

Ich wäre für jede Anregung dankbar.

O. O.

Bearbeiten: Zusätzliche Informationen

In der Projekt-Eigenschaften in der Registerkarte "Web wählte ich Öffnen Sie keine Seite. Warten Sie auf eine Anfrage von einer externen Anwendung. Ich habe auch eine System.Web.HttpException also ging ich zu Fehlersuche -> Ausnahmen -> Common Language Runtime und markierte das Kästchen neben System.Web .

Im Folgenden finden Sie meine Stack-Trace. Er scheint nicht zu meinem Handler zu gelangen. Habe ich es falsch definiert in meinem Web-Konfiguration ??

>   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]

3voto

CodeCaster Punkte 140110

Veröffentlichen Sie den Handler in seiner eigenen IIS-Anwendung und dann anhängen. Visual Studio zu IIS und Sie sind bereit zum Debuggen.

Wenn Sie nicht auf IIS deployen wollen oder können (beim Debuggen von HTTP-Handlern konfiguriere ich das Post-Build-Skript so, dass das Projekt auf IIS veröffentlicht wird), können Sie Cassini debuggen, indem Sie die Startoption Ihres Projekts auf "Don't open a page" setzen und Visual Studio mit aspnet_wp.exe .

Und vergessen Sie nicht, Visual Studio als Administrator auszuführen, sonst funktioniert das Anhängen nicht.

2voto

tbroberg Punkte 635

Wenn alles andere fehlschlägt, können Sie eine Debug-Unterbrechung in Ihrer Anwendung mit DebugBreak(), __debugBreak(), oder _asm int 3. Wenn dies ausgeführt wird und Sie MSDev installiert haben, sollten Sie ein Dialogfeld erhalten, in dem Sie gefragt werden, ob Sie die Anwendung beenden oder debuggen möchten. Auf diese Weise können Sie jetzt starten und später anhängen, ohne dass Sie wissen müssen, woran Sie anhängen wollen.

1voto

Suraj Shinde Punkte 31

Haltepunkte werden getroffen, wenn Sie einen Prozess (z.B. w3wp.exe) mit der Option tools->Attach to process anhängen und den gewünschten Prozess auswählen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X