【发布时间】:2012-10-28 22:25:09
【问题描述】:
我有一个具有单页方法的网络表单。我的其他 Web 应用程序将未处理的异常记录到 Web 服务器上的系统事件日志中。由于与我合作的其他开发人员希望在事件日志中看到应用错误条目,因此我希望此应用也能这样做。
但是,当从页面方法中调用代码捕获异常时,我让应用程序发送错误电子邮件。发生这种情况时,它不会写入事件日志。注意:页面方法调用我的邮件通知方法后重新抛出异常。
从我目前所读到的内容看来,ASP.Net 默认将错误记录到事件日志中。我想页面方法/WebMethods 的情况并非如此,因为它们基本上将异常抛出给调用它的客户端代码。
是否有一种简单的方法可以使该异常正确冒泡以便写入事件日志?没有其他应用程序直接根据我所看到的内容写入事件日志,因此我认为该应用程序不会创建新源,因为我们的安全人员将很多事情锁定(出于善意,是的安全)。
[WebMethod]
public static object MyPseudoWebMethod()
{
try
{
// My exception spawning unreliable code here
}
catch(Exception ex)
{
// Cleanup ...
this.SendErrorNotification(ex);
throw; // <-- This doesn't bubble up but I'd love for it to!
}
}
【问题讨论】:
-
您确定这没有像其他异常一样得到处理吗?我假设您的应用程序会像处理其他任何错误一样处理该错误,唯一的区别是客户端页面不会明显改变。但是在 AJAX 调用之后,webmethod 会抛出异常,这会使 AJAX 响应成为 YellowScreenOfDeath 或您拥有的任何自定义错误页面,并且所有后续代码都将由此类自定义错误页面执行。
-
错误日志不包含异常,但它包含来自其他应用程序的异常。不过,AJAX 调用不会呈现黄色死屏。页面已经加载,客户端javascript调用webmethod,webmethod抛出异常,客户端javascript检测到错误但事件日志中没有记录异常。
-
你有一个“只有一个 WebMethod 的网络表单”?
-
做了一些研究......好吧,你是正确的 jlafay,但不是 100%。 WebMethods 有一个特殊性,即 XML Web 服务的 HTTP 处理程序在异常到达 global.asax 之前将其吞下,但“正常”AJAX 调用不遵循该模式。因此,如果它不是一个 WebMethod,而只是一个返回字符串或其他内容的 ASPX 页面,它将在日志记录方面与其他页面一样处理异常。我会想办法解决这个问题。
-
@JohnSaunders,是的。这是我有时会做的一个项目。这是一个非常简单的内部网络应用程序。它是一个 Web 表单,其背后的代码有一个 WebMethod,它调用 WCF 服务,该服务是我们中间层的一部分,用于检索实体以传回给客户端。
标签: asp.net exception-handling asmx webforms pagemethods