我已經在Visual Studio中的HttpHandler中設置了一個斷點。 HttpHandler是一個.ashx文件,我試圖通過在VS開發Web服務器中運行我的應用程序進行調試。我的斷點是而不是被擊中。如何調試ASP.net HTTPHandler
我該如何切入?
編輯:我的斷點不擊中
我已經在Visual Studio中的HttpHandler中設置了一個斷點。 HttpHandler是一個.ashx文件,我試圖通過在VS開發Web服務器中運行我的應用程序進行調試。我的斷點是而不是被擊中。如何調試ASP.net HTTPHandler
我該如何切入?
編輯:我的斷點不擊中
在Visual Studio中打開處理程序文件並按照所述放置斷點。然後在瀏覽器中加載Web應用程序(當然,以調試模式啓動您的應用程序)。如果斷點保持灰色,並且不會變成黑色填充,那麼您的處理程序可能未在您的Web應用程序中正確註冊。這主要是問題。如果根據你的一切都很好,嘗試做一個乾淨的+重建你的整個解決方案。並將您的項目設置爲啓動項目(如果您使用多個項目)。通常這已經有所幫助。
在Visual Studio中,查看調試菜單。在那裏你可以找到Step Into,Step Over等,根據你的鍵盤綁定,你通常可以打F10。
嘗試使用內置的web服務器而不是本地IIS進行調試(如果您使用的是本地IIS,則反之亦然)。這兩個Web服務器之間存在細微的差異。
這總是我的問題,當我在調試web項目時遇到困難。出於某種原因,Visual Studio 2013似乎默認爲IIS Express ...我從不想要! – Kik 2015-06-05 20:20:15
我有這個問題,事實證明ashx文件沒有編譯。我猜他們在運行時得到編譯,因爲直到那時我纔得到編譯錯誤。此外,我沒有看到黃色的死亡屏幕顯示HttpCompileException,因爲:
最終,我沒有看到新引進的例外,固定的編譯錯誤,現在的斷點被擊中像它應該,儘管它不亮時,調試器開始啓動,而當處理程序調用(在我的情況下通過AJAX調用)。
我在使用IIS進行調試時遇到了同樣的問題。
修復: *在IIS中添加處理程序映射:將類型指定爲完全限定處理程序類名稱(例如MyCompany.MyApp.MyHandler)。
我的web.config也有一個HttpHandlers的元素:
<add verb="*" path="*.p1s" type="MyCompany.MyApp.MyHandler, MyWebService" />
(我的內置組件是MyWebService.dll)
上述方案並沒有爲我工作。我已經讓我的處理程序正確註冊了。
我的處理程序是在一個網站項目(而不是一個Web應用程序)。它被另一個網站(測試項目)在同一個Visual Studio解決方案中訪問。爲了加載調試符號,我將解決方案設置爲在啓動時啓動多個項目。首先我的處理程序,然後是我的測試項目
最新回覆,但如果您之前沒有找到答案,它可能會有效。
如果您通過複製現有的ashx處理程序來創建您的處理程序,您的問題很可能是您的處理程序的標記文件仍然指向原始處理程序。
默認情況下VS在雙擊.ashx文件時打開.ashx.cs文件,因爲標記文件幾乎是不需要的。
通過右鍵單擊ashx VS將顯示選項以查看標記,請確保Class屬性不是指舊處理程序。
<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs"
Class="mynamespace.MyOldHandler" %>
如果你沒有通過你的應用程序中從一個網頁訪問它來調試HTTP處理程序,試試你的網絡瀏覽器中直接訪問處理程序的網址。
例如:
http://localhost/YourSite/YourHandler.ashx
我發現使用調試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();行,等着你繼續。
無上述工作對我來說與Visual Studio 2015年不過sorinc的響應避讓我添加以下到附近的某處處理程序文件的啓動:
System.Diagnostics.Debugger.Break();
調試器然後停在斷點我有組。
我嘗試了上述幾個建議沒有任何運氣。然後我打開我的web.config,解決方案很明顯。我在<system.web>
節點中將<compilation>
節點的debug屬性設置爲false。一旦我將它設置爲true,重新編譯,並通過調試啓動應用程序,我的斷點就被擊中了。
<system.web>
<compilation debug="true" />
</system.web>
你如何註冊處理程序?我不認爲你必須註冊* .ashx文件。 – 2009-07-28 13:27:53
看到這個來學習如何註冊處理程序http://msdn.microsoft.com/en-us/library/46c5ddfy(VS.80).aspx – MOZILLA 2009-07-28 13:34:41
這就是我的意圖。可能它沒有正確註冊,因此你的斷點從未被擊中。 – Juri 2009-07-28 13:37:09