簡體   English   中英

捕獲由通用處理程序(ashx)文件導致的ASP.NET中的異常

[英]Catch exceptions in ASP.NET resulting from Generic Handler (ashx) file

我正在嘗試使其他服務器端堆棧與我的ASP.NET網站一起運行。 我的ashx文件似乎拋出500 Internal Server Error。 我如何確定該ashx文件引發什么異常或引發500的原因? 當我附加到IIS 7 w3wp.exe進程時,它不會引發異常,但是我正在讀這種情況。

ashx文件位於我的ASP.NET站點的根目錄中,並且“屬性”已設置為可編譯。

GET http://uhc-8:8883/MyApp/ExtDirectProxy.ashx 500 (Internal Server Error) index.html:27
Uncaught TypeError: Cannot read property 'isProvider' of null ext-all-debug.js:74832
allow right click initializing for http://uhc-8:8883/MyApp/index.html rightclick.js:1
allow right click processing http://uhc-8:8883/MyApp/index.html rightclick.js:25

如果您有一個名為“ App_Code”的文件夾,則可能會遇到頭痛和偏頭痛。 或簡單地用一些隨機名稱(例如“代碼”或“數據”)替換“ App_Code”,然后將您的類放在此處以解決此問題。 就我而言,我的項目GUID是Web應用程序和C#類型。

最佳答案:

App_Code文件夾問題

注意:

我使用帶有靜態端口的IIS運行站點,而不使用帶有動態端口的Visual Studio 2012。 我在Web服務器上具有特定的服務器配置,因此我希望該站點的行為與我們發布的站點的工作方式相同。 這就是為什么我那樣運行它。

回答我的問題:

發生這種情況是因為在bin文件夾中有App_Data類的重復版本。 * .cs的“編譯”版本和* .cs的網站版本。 當存在多個同名類時,將發生“ isProvider”錯誤。 部署ASP.NET應用程序時,僅部署* .cs文件的編譯版本。 在開發環境中,我們將其設置為“屬性”>“構建動作”>“無”。

不確定周圍是否有簡單的方法。 這可能與將文件存放在臨時文件夾和/或obj文件夾中有關,但不能完全確定。 將需要更多的故障排除來發現原因。 同時,這里列出了解決此問題的方法。 不知道其中的某些或全部是否必要,但現在可以使用。

解決步驟:

  • 將所有App_Data * .cs文件更改為“屬性”>“構建動作”>“編譯”
  • 修復它們拋出的異常以使該構建再次起作用-清潔解決方案>生成解決方案... 設置為Properties> Build Action> None的那些異常未捕獲到一個異常,因此這是必要的。 本質上,Visual Studio 2012不會引發異常並顯示“ Build Success”。
  • 然后將App_Data * .cs文件更改回“屬性”>“構建操作”>“無”
  • 從\\ obj \\ Debug中刪除dll
  • 從\\ bin中刪除dll
  • 刪除臨時ASP.NET文件C:\\WINDOWS\\Microsoft.NET\\Framework\\{.NET version}\\Temporary ASP.NET Files\\
  • 建立解決方案
  • 重新啟動IIS網站

現在一切正常!

編輯:

實際問題是我在Visual Studio中引用了一個外部項目,但是沒有dll文件,因為項目類型是控制台應用程序而不是類庫。 真正的問題是,當您對其他項目具有using語句時,Visual Studio說它可以很好地編譯代碼(在App_Code中),但是即使已為所有* .cs文件中的Build Action> Compile選項設置了,Visual Studio也會說“ Building Success”。 App_Code。 運行Web應用程序時,必須將其重新設置為Build Action> None才能運行。 但是,由於App_Code中的* .cs文件實際上並未使用新代碼進行編譯(如果IIS中的ASP.NET處理這些App_Code * .cs文件的方式是這樣),則由於沒有良好的CIL代碼,它會引發500 Internal Server錯誤。在運行時。 為了解決這個問題,我只是將項目類型更改為“類庫”,它仍然沒有錯誤,但是現在它可以將dll引用到其他項目。

找到重復的類時,總是會發生isProvider錯誤。 所以我不確定為什么會發生這種情況,但是一旦您修復了上面的部分,那基本上就消失了。

您可以在Global.asax文件中使用Application_Error事件來捕獲該錯誤。

protected void Application_Error(Object sender, EventArgs e)
{
    HttpContext ctx = HttpContext.Current;
    Exception exception = ctx.Server.GetLastError();
    int httpCode = ((HttpException)exception).GetHttpCode(); // check if it is 500
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM