5

से एक HTTP हैंडलर डिबगिंग मैं डिबग करने के लिए एक HTTP दृश्य स्टूडियो और तोड़ने बिंदु में हैंडलर हिट नहीं हो रही है कोशिश कर रहा हूँ। क्या किसी को विजुअल स्टूडियो में HTTP हैंडलर डीबग करने के बारे में कोई जानकारी है?दृश्य स्टूडियो

मैं एक विंडोज 7 मशीन पर VS 2010 प्रीमियम, .NET 4.0 का उपयोग कर रहा हूँ। मेरी वेब अनुप्रयोग में मैं /HTTPHandler/TrackingHandler.cs

निम्नलिखित मेरी वेब config में है फ़ाइल में एक HTTP हैंडलर है:

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

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

में किसी भी यादृच्छिक पृष्ठ का उपयोग करके मैं अपना वेब एप्लिकेशन शुरू करता हूं विजुअल स्टूडियो डीबग बिल्टिन वेब सर्वर का उपयोग कर। मैं फिर /tx/निर्देशिका और उसके बाद कुछ यादृच्छिक स्ट्रिंग को इंगित करने के लिए URL को मैन्युअल रूप से संपादित करता हूं। उदाहरण के लिए मेरा वर्तमान यूआरएल http: // localhost: 53699/tx/sdfs जैसा दिखता है। मैंने सोचा कि इसे प्रोसेसरेक्वेस्ट() की पहली पंक्ति पर ब्रेकपॉइंट खींचना चाहिए, लेकिन ऐसा नहीं है।

मैं किसी भी विचार के लिए आभारी रहूंगा।

ओ ओ

संपादित करें: अतिरिक्त जानकारी

प्रोजेक्ट गुण में, वेब टैब में, मैं चयनित पृष्ठ खोलने के न करें। बाहरी एप्लिकेशन से अनुरोध की प्रतीक्षा करें। मैं भी एक System.Web.HttpException हो रही थी, तो मैं डिबग के लिए चला गया -> अपवाद -> साझा भाषा क्रम और System.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] 

उत्तर

3

अपनी ही आईआईएस आवेदन करने के लिए हैंडलर प्रकाशित करें और फिर attach आईआईएस के लिए दृश्य स्टूडियो और आप डिबग करने के लिए तैयार कर रहे हैं।

यदि आप आईआईएस को तैनात नहीं करना चाहते हैं या नहीं कर सकते हैं (जब HTTP हैंडलर डीबग करते हैं तो मैं प्रोजेक्ट को आईआईएस में प्रकाशित करने के लिए पोस्ट बिल्ड स्क्रिप्ट को कॉन्फ़िगर करता हूं), तो आप अपनी परियोजना के स्टार्टअप विकल्प को सेट करके कैसिनी डिबग कर सकते हैं 'एक पृष्ठ न खोलें' और विजुअल स्टूडियो को aspnet_wp.exe से जोड़ना।

और विजुअल स्टूडियो को व्यवस्थापक के रूप में चलाने के लिए मत भूलना, या अटैचिंग काम नहीं करेगा।

+0

धन्यवाद। मुझे प्रक्रियाओं की सूची में ** aspnet_wp.exe ** नहीं मिला। मैंने अपने मूल प्रश्न में संपादन में उल्लिखित _ "एक पृष्ठ न खोलें" _ विकल्प के साथ वीएस में इसे शुरू करने का प्रयास किया। स्टैक ट्रेस से मुझे लगता है कि यह मेरे कोड में भी नहीं पहुंच रहा है। मैं हमेशा ** व्यवस्थापक ** के रूप में वीएस चल रहा हूँ। –

+0

AttachTo addin VS.NET 2015 –

1

सब कुछ विफल हो, तो आप DebugBreak(), __debugBreak() के साथ अपने आवेदन में एक debug interrupt उत्पन्न कर सकते हैं, या _asm 3. int जब यह मार डाला है और आप msdev स्थापित है, तो आप पूछ किया जाना चाहिए एक संवाद बॉक्स आप अगर समाप्त या डिबग करना चाहते हैं। यह आपको अब चलाने और बाद में संलग्न करने की अनुमति देता है, और यह जानने के बिना काम करता है कि आपको क्या संलग्न करना है।

+0

@ tbroberg के साथ संगत नहीं है: मैं ** DebugBreak() ** कहां रखूं? यह ** ProcessRequest() ** की पहली पंक्ति पर काम नहीं करता है। ।। (मैं नहीं मिल सका ** DebugBreak() ** संकलित करने के लिए मुझे लगता है यह सिर्फ सी ++ के लिए है, जबकि मैं सी # का उपयोग कर रहा मैं बजाय प्रयोग किया ** Debugger.Launch(); Debugger.Break(); ** - लेकिन यह काम नहीं किया।) –

+0

आह, सी #। यह [संबंधित धागा] देखें (http://stackoverflow.com/questions/104235/how-can-i-use-debugbreak-in-c) – tbroberg

1

ब्रेकपॉइंट्स हिट हो जाएंगे यदि आप विकल्प टूल्स (उदाहरण के लिए w3wp.exe) से प्रक्रिया संलग्न करते हैं-> प्रक्रिया को संलग्न करें और वांछित प्रक्रिया का चयन करें।