C# 捕获ASP.NET中由通用处理程序(ashx)文件导致的异常

C# 捕获ASP.NET中由通用处理程序(ashx)文件导致的异常,c#,typeerror,ashx,app-code,ext-direct,C#,Typeerror,Ashx,App Code,Ext Direct,我正在尝试使另一个服务器端堆栈与我的ASP.NET站点一起运行。我的ashx文件似乎抛出了一个500内部服务器错误。我如何找出这个ashx文件抛出的异常或抛出500的原因?当我连接到我的IIS 7 w3wp.exe进程时,它不会抛出异常,但我了解到可能是这种情况 ashx文件位于我的ASP.NET站点的根目录中,属性将其设置为编译 GET http://uhc-8:8883/MyApp/ExtDirectProxy.ashx 500 (Internal Server Error) index.h

我正在尝试使另一个服务器端堆栈与我的ASP.NET站点一起运行。我的ashx文件似乎抛出了一个500内部服务器错误。我如何找出这个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

您可以使用
Global.asax
文件中的
Application\u 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
}

您可以使用
Global.asax
文件中的
Application\u 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
}
如果你有一个名为“App_Code”的文件夹,你可能会遇到麻烦 还有偏头痛。或者简单地用一些随机名称替换“应用程序代码”,如 “代码”或“数据”,并将您的类放在其中以解决此问题。在我的 在这种情况下,我的项目GUID是一个Web应用程序和C类型

最佳答案:

注意:

我使用带有静态端口的IIS运行该站点,而不是使用带有动态端口的Visual Studio 2012。我在web服务器上有特定的服务器配置,因此我希望该站点的行为与我们发布的站点的工作方式相同。这就是为什么我要这样运行它

回答我的问题:

这是因为我们在bin文件夹中有重复版本的App_数据类。*.cs的“编译”版本和*.cs的网站版本。当存在多个同名类时,会发生“isProvider”错误。当我们部署ASP.NET应用程序时,我们只部署*.cs文件的编译版本。在开发环境中,我们将它们设置为属性>构建操作>无

不确定有没有一个简单的方法来解决这个问题。这可能与临时和/或obj文件夹中的内容有关,但不能确切确定。需要更多的故障排除才能发现原因。同时,这里列出了解决问题的方法。不确定这些是否都是必要的,但它现在起作用了

修复步骤:

  • 将所有App_Data*.cs文件更改为属性>构建操作>编译
  • 修复他们抛出的异常以使构建再次工作-清理解决方案>构建解决方案。。。设置为Properties>Build Action>None时,有一个异常未被捕获,因此这就是为什么需要这样做。从本质上讲,VisualStudio2012不会抛出异常,而是说“构建成功”
  • 然后将App_Data*.cs文件更改回属性>生成操作>无
  • 从\obj\Debug中删除DLL
  • 从\bin中删除DLL
  • 删除临时ASP.NET文件-
    C:\WINDOWS\Microsoft.NET\Framework\{.NET版本}\ASP.NET临时文件\
  • 构建解决方案
  • 重新启动IIS网站
现在一切都很顺利

编辑:

实际的问题是,我在VisualStudio中引用了一个外部项目,但它没有dll文件,因为项目类型是控制台应用程序,而不是类库。真正的问题是,当您对另一个项目有using语句时,VisualStudio说它可以很好地编译代码(在App_代码中),但说编译成功,即使在App_代码中的所有*.cs文件都设置了Build Action>Compile选项。运行web应用程序时,必须将其设置回Build Action>None才能正常工作。但是,由于App_代码中的*.cs文件实际上并没有使用新代码编译(如果IIS中的ASP.NET就是这样处理这些App_代码*.cs文件的),它会抛出500内部服务器错误,因为在运行时没有好的CIL代码。为了解决这个问题,我刚刚将项目类型更改为类库,它仍然没有错误,但现在它可以将dll引用到其他项目

isProvider错误总是在发现重复类时发生。所以我不确定为什么会发生这种情况,但一旦你修复了上面的部分,这种情况基本上就消失了

如果你有一个名为“App_Code”的文件夹,你可能会遇到麻烦 还有偏头痛。或者简单地用一些随机名称替换“应用程序代码”,如 “代码”或“数据”,并将您的类放在其中以解决此问题。在我的 在这种情况下,我的项目GUID是一个Web应用程序和C类型

最佳答案:

注意:

我使用带有静态端口的IIS运行该站点,而不是使用带有动态端口的Visual Studio 2012。我在web服务器上有特定的服务器配置,因此我希望该站点的行为与我们发布的站点的工作方式相同。这就是为什么我要这样运行它

回答我的问题:

这是因为我们在bin文件夹中有重复版本的App_数据类。*.cs的“编译”版本和*.cs的网站版本。当存在多个同名类时,会发生“isProvider”错误。当我们部署ASP.NET应用程序时,我们只部署*.cs文件的编译版本。在开发环境中,我们将它们设置为属性>构建操作>无

不确定有没有一个简单的方法来解决这个问题。这可能与临时和/或obj文件夹中的内容有关,但不能确切确定。需要更多的故障排除才能发现原因。同时,这里列出了解决问题的方法。不确定这些是否都是必要的,但它现在起作用了

修复步骤:

  • 将所有App_Data*.cs文件更改为属性>构建操作>编译
  • 修复他们抛出的异常以使构建再次工作-清理解决方案>构建解决方案。。。设置为Properties>Build Action>None时,有一个异常未被捕获,因此这就是为什么需要这样做。基本上,VisualStudio