2014-10-01 57 views
1

我正在嘗試使用我的ASP.NET網站獲取不同的服務器端堆棧。我的ashx文件似乎在拋出500內部服務器錯誤。我怎麼知道這個ashx文件拋出什麼異常或者拋出500的原因?當我附加到我的IIS 7 w3wp.exe進程時,它不會引發異常,但我正在閱讀,可能是這種情況。在通用處理程序(ashx)文件中產生的ASP.NET中捕獲異常

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 

回答

2

如果你有一個名爲 「App_Code文件」 文件夾,你可以通過頭痛 和migranes。或者簡單地用一些隨機的名稱替換「App_Code」,如 「代碼」或「數據」,然後把你的課程放在那裏來解決這個問題。在我的 大小寫中,我的項目GUID是一個Web應用程序和C#類型。

最佳答案:

App_Code folder issues

注:

我使用IIS與靜態端口上運行的網站,而不是使用Visual Studio 2012與動態端口。我在Web服務器上有特定的服務器配置,所以我希望網站的行爲與我們發佈的網站的工作方式相同。所以我就這樣運行它。

回答我的問題:

發生這種情況,因爲我們有在bin文件夾App_Data文件類的複製版本。 * .cs的「編譯」版本以及* .cs的網站版本。當存在多個具有相同名稱的類時,會發生「isProvider」錯誤。當我們部署ASP.NET應用程序時,我們只部署* .cs文件的編譯版本。在開發環境中,我們將它們設置爲「屬性」>「構建操作」>「無」。

不確定一個簡單的方法。它可能與臨時文件夾和/或obj文件夾中的東西有關,但不完全確定。將採取一些更多的故障排除來找出原因。與此同時,這裏是解決問題的事情清單。不確定是否有一些或所有這些都是必要的,但它現在正在工作。

步驟來解決:

  • 改變所有的App_Data *的.cs文件屬性>生成操作>編譯他們扔來獲取重新建造工作
  • 修復例外 - 清理解決方案>生成解決方案。 .. 一個異常沒有被設置爲屬性>構建操作>無,因此這就是爲什麼這是必要的。本質上,Visual Studio 2012不會拋出異常並說「構建成功」。
  • 然後更改App_Data *。CS文件回到屬性>生成操作>無
  • 刪除DLL的出\ OBJ \調試
  • 刪除DLL的出\ bin中的
  • 刪除臨時ASP.NET文件 - C:\WINDOWS\Microsoft.NET\Framework\{.NET version}\Temporary ASP.NET Files\
  • 生成解決方案
  • 重啓IIS網站

現在工作很好!

編輯:

實際的問題是,我是引用在Visual Studio中的外部項目,但有沒有它的dll文件,因爲該項目類型爲控制檯應用程序,而不是類庫。真正的問題在於,當你有一個對其他項目的使用語句時,Visual Studio聲稱它會編譯好代碼(在App_Code中),但即使構建成功,即使對於所有* .cs文件中的Build Action> Compile選項App_Code文件。運行Web應用程序時,必須將其重新設置爲「生成操作」>「無」才能使其運行。但是,由於App_Code中的* .cs文件實際上並未使用新代碼編譯(如果這是IIS中的ASP.NET如何處理這些App_Code * .cs文件),它會引發500內部服務器錯誤,因爲沒有良好的CIL代碼在運行期間。爲了解決這個問題,我只是將項目類型更改爲類庫,但它仍然沒有錯誤,但現在可以將dll引用到其他項目。

找到重複的類時,始終會發生isProvider錯誤。所以我不確定爲什麼會出現這種情況,但是一旦您修復了上述部分,就會消失。

+0

也引用此。 http://stackoverflow.com/questions/4038082/asp-net-web-site-cant-see-cs-file-in-app-code-folder/4038297#comment41203788_4038297 – MacGyver 2014-10-08 19:41:53

+0

導致這種情況的另一件事是如果ASP.NET v4。*在IIS管理器中不存在> ISAPI和CGI限制。默認情況下,安裝ASP.NET v2。*。按照我的說明在這裏的指示(2步驟):http://stackoverflow.com/questions/8912463/asp-net-ashx-request-404 – MacGyver 2015-12-07 20:28:29

+0

步驟#4和#5 – MacGyver 2015-12-08 14:55:11

1

可以使用Application_Error事件Global.asax文件趕上這個錯誤。

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 
} 
+0

看起來像我有這個文件,並有Application_Error方法,但我沒有實現(沒有代碼在那裏)。我添加了你的代碼,並且放置了一個斷點,但沒有打開。 – MacGyver 2014-10-01 06:27:04

+0

有沒有其他的想法? – MacGyver 2014-10-01 06:33:59

+0

@MacGyver它是根處理程序。你有沒有試過ashx中的錯誤處理程序? – 2014-10-01 06:37:25

相關問題