2009-07-28 31 views
16

我已經在Visual Studio中的HttpHandler中設置了一個斷點。 HttpHandler是一個.ashx文件,我試圖通過在VS開發Web服務器中運行我的應用程序進行調試。我的斷點是而不是被擊中。如何調試ASP.net HTTPHandler

我該如何切入?

編輯:我的斷點擊中

回答

3

在Visual Studio中打開處理程序文件並按照所述放置斷點。然後在瀏覽器中加載Web應用程序(當然,以調試模式啓動您的應用程序)。如果斷點保持灰色,並且不會變成黑色填充,那麼您的處理程序可能未在您的Web應用程序中正確註冊。這主要是問題。如果根據你的一切都很好,嘗試做一個乾淨的+重建你的整個解決方案。並將您的項目設置爲啓動項目(如果您使用多個項目)。通常這已經有所幫助。

+0

你如何註冊處理程序?我不認爲你必須註冊* .ashx文件。 – 2009-07-28 13:27:53

+0

看到這個來學習如何註冊處理程序http://msdn.microsoft.com/en-us/library/46c5ddfy(VS.80).aspx – MOZILLA 2009-07-28 13:34:41

+0

這就是我的意圖。可能它沒有正確註冊,因此你的斷點從未被擊中。 – Juri 2009-07-28 13:37:09

-1

在Visual Studio中,查看調試菜單。在那裏你可以找到Step Into,Step Over等,根據你的鍵盤綁定,你通常可以打F10。

2

嘗試使用內置的web服務器而不是本地IIS進行調試(如果您使用的是本地IIS,則反之亦然)。這兩個Web服務器之間存在細微的差異。

+0

這總是我的問題,當我在調試web項目時遇到困難。出於某種原因,Visual Studio 2013似乎默認爲IIS Express ...我從不想要! – Kik 2015-06-05 20:20:15

6

我有這個問題,事實證明ashx文件沒有編譯。我猜他們在運行時得到編譯,因爲直到那時我纔得到編譯錯誤。此外,我沒有看到黃色的死亡屏幕顯示HttpCompileException,因爲:

  • 我最初打算修復asxh文件中的一個錯誤。
  • 我對該文件進行了更改以修復該錯誤,其中我不知不覺地引入了一個編譯錯誤。
  • 我測試了錯誤修復,得到了我在自定義錯誤中配置的通用友好異常。
  • 我認爲這是同樣的錯誤我已經進入修復,因爲我看不到真正的異常死亡的一拉黃屏,並沒有理會檢查ELMAH
  • 我設置斷點,也不能圖爲什麼它沒有被擊中。

最終,我沒有看到新引進的例外,固定的編譯錯誤,現在的斷點被擊中像它應該,儘管它不亮時,調試器開始啓動,而當處理程序調用(在我的情況下通過AJAX調用)。

0

我在使用IIS進行調試時遇到了同樣的問題。

修復: *在IIS中添加處理程序映射:將類型指定爲完全限定處理程序類名稱(例如MyCompany.MyApp.MyHandler)。

我的web.config也有一個HttpHandlers的元素:

<add verb="*" path="*.p1s" type="MyCompany.MyApp.MyHandler, MyWebService" /> 

(我的內置組件是MyWebService.dll)

0

上述方案並沒有爲我工作。我已經讓我的處理程序正確註冊了。

我的處理程序是在一個網站項目(而不是一個Web應用程序)。它被另一個網站(測試項目)在同一個Visual Studio解決方案中訪問。爲了加載調試符號,我將解決方案設置爲在啓動時啓動多個項目。首先我的處理程序,然後是我的測試項目

9

最新回覆,但如果您之前沒有找到答案,它可能會有效。

如果您通過複製現有的ashx處理程序來創建您的處理程序,您的問題很可能是您的處理程序的標記文件仍然指向原始處理程序。

默認情況下VS在雙擊.ashx文件時打開.ashx.cs文件,因爲標記文件幾乎是不需要的。

通過右鍵單擊ashx VS將顯示選項以查看標記,請確保Class屬性不是指舊處理程序。

<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs" 
    Class="mynamespace.MyOldHandler" %> 
0

如果你沒有通過你的應用程序中從一個網頁訪問它來調試HTTP處理程序,試試你的網絡瀏覽器中直接訪問處理程序的網址。

例如:

http://localhost/YourSite/YourHandler.ashx 
0

我發現使用調試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();行,等着你繼續。

1

無上述工作對我來說與Visual Studio 2015年不過sorinc的響應避讓我添加以下到附近的某處處理程序文件的啓動:

System.Diagnostics.Debugger.Break(); 

調試器然後停在斷點我有組。

0

我嘗試了上述幾個建議沒有任何運氣。然後我打開我的web.config,解決方案很明顯。我在<system.web>節點中將<compilation>節點的debug屬性設置爲false。一旦我將它設置爲true,重新編譯,並通過調試啓動應用程序,我的斷點就被擊中了。

<system.web> 
    <compilation debug="true" /> 
</system.web>