2014-10-01 54 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

相关问题